ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 Lossless jpeg transformations

Note: You must be registered in order to post a reply.
To register, click here. Registration is FREE!

View 
UserName:
Password:
Format  Bold Italicized Underline  Align Left Centered Align Right  Horizontal Rule  Insert Hyperlink   Browse for an image to attach to your post Browse for a zip to attach to your post Insert Code  Insert Quote Insert List
   
Message 

 

Emoji
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Black Eye [B)]
Frown [:(] Shocked [:0] Angry [:(!] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

 
Check here to subscribe to this topic.
   

T O P I C    R E V I E W
John Posted - Oct 28 2013 : 19:38:04
I understand the issue of jpeg image degradation when the image is repeatedly loaded and saved. The question is what if a jpeg image is loaded into an ImageEnView component where it is rotated and then the rotated image is moved into a second ImageEnView component without an intervening saving of the image. Will there be a loss of image quality between the first and second image even though the image was not saved? An example of this is given in the four lines of code below.

ImageEnViewLeft.Proc.Rotate(wwDBSpinEditRotate.Value, ESBCheckBox1.Checked, ierBiCubic, -1); // requires ImageEnProc unit
ImageEnViewMiddle.Assign(ImageEnViewLeft);
ImageEnViewMiddle.IO.Params.Assign(ImageEnViewLeft.IO.Params);
ImageEnViewMiddle.Fit;

The point to the question is whether in the above situation, the JPEGlosslessTransform function needs to be used in the first line of code above and then the saved image placed into the second ImageEnView component. Obviously, there is a great deal more disk and cpu activity required if the JPEGLosslessTransform procedure is required.

TIA

John


4   L A T E S T    R E P L I E S    (Newest First)
John Posted - Nov 06 2013 : 14:11:19
Nigel

Thanks for the clarification

John
xequte Posted - Nov 04 2013 : 11:52:49
Hi John

a. No, lossless functions work on a file only. You could track the changes made to an image and if they are supported by lossless JPEG functionality then perform a lossless crop on the source file, rather than saving the image from the ImageEnView

b. No, that is not possible. Lossless transformations were never a part of the JPEG standard, they are an unofficial, but widely used retrofit, so there is no technical way to perform irregular rotations.

c. No, again, not technically possible

d. If you are not cropping (jtCut) then the value of the rect is irrelevant, i.e. you can just specify it as Rect(0, 0, 0, 0)

Nigel
Xequte Software
www.xequte.com
nigel@xequte.com
John Posted - Nov 04 2013 : 05:58:04
If multiple transformations are made to an object and with each transformation the image is placed in a new ImageEnView component then:

a) is there a mechanism to save the image in the last ImageEnView component in a lossless manner directly from the ImageEnView component without saving the image after each individual transformation is made?

b) is there a mechanism to save a rotated image in a lossless manner when it is rotated some number of degrees that does not correspond to the 90, 180 and 270 degrees defined by TIEJpegTransform?

c) if b) is possible would this also apply to images where properties not included in the TIEJpegTransform list were modified, i.e. brightness, intensity, etc.


As a separate question, if the transformation is not jtCut and there is no selected cropbox to define tempRect, then how does one define the CutRect in JpegLosslessTransform?



TIA

John


xequte Posted - Oct 28 2013 : 22:11:39
Hi John

When you are assigning an image from one TImageEnView to another (or to/from another destination, such as a TIEBitmap, TBitmap, TGraphic, etc) it is a bitmap that you are assigning, so there is no loss of quality even if the image type was originally JPEG.

IOW, your code above does not cause image degradation.

JPEG degradation occurs only at the point where an image is saved to file (IO.SaveToFile) or stream (IO.SaveToStream), assuming you do not use a lossless method.



Nigel
Xequte Software
www.xequte.com
nigel@xequte.com