मैं imgQInput (जो एक टीआईमेज है) में एक छवि लोड करने का प्रयास करता हूं, इसे एक TJpegImage को असाइन करें, इसे संपीड़ित करें (संपीड़न कारक 5) और इसे imgQOutput (एक और TImage) में दिखाएं। लेकिन यह काम नहीं करता है। ImgQOutput में छवि मूल के समान ही है। यह संपीड़न कारक के कारण बहुत pixelated देखना चाहिए! संपीड़न हालांकि काम करता है, क्योंकि जब मैं जेपीईजी को डिस्क में सहेजता हूं तो यह वास्तव में छोटा होता है।जेपीईजी छवि को संपीड़ित नहीं कर सकता है और इसे स्क्रीन पर दिखाया जा सकता है
JPG:= TJPEGImage.Create;
TRY
JPG.CompressionQuality:= trkQuality.Position;
JPG.Assign(imgQInput.Picture.Graphic);
CompressJpeg(JPG);
imgQOutput.Picture.Assign(JPG); <--------- something wrong here. the shown image is not the compressed image but the original one
FINALLY
FreeAndNil(JPG);
END;
function CompressJpeg(OutJPG: TJPEGImage): Integer;
VAR tmpQStream: TMemoryStream;
begin
tmpQStream:= TMemoryStream.Create;
TRY
OutJPG.Compress;
OutJPG.SaveToStream(tmpQStream);
OutJPG.SaveToFile('c:\CompTest.jpg'); <--------------- this works
Result:= tmpQStream.Size;
FINALLY
FreeAndNil(tmpQStream);
END;
end;
TJpegImage दोनों बिटमैप डीआईबी के साथ-साथ जेपीगेडेटा रखता है, भले ही संपीड़न काम करता है और फ़ाइल/स्ट्रीम में सहेजने से संकुचित जेपीईजी बचाता है, इसे टीआईमेज में असाइन किया जाता है। चित्र आपको मूल छवि के साथ छोड़कर डीआईबी का उपयोग करता है, वाहिद उत्तर काम करता है क्योंकि उसने जेपीईजी को स्ट्रीम से वापस लोड किया है, इस प्रकार डीआईबी को साफ़ कर दिया है। – Dampsquid
धन्यवाद Dampsquid। स्ट्रीम से इसे पुनः लोड किए बिना इसे करने का दूसरा तरीका है? JpegNeeded की तरह या तो? – Ampere
मुझे कभी नहीं मिला, DIBNeeded केवल एक बनाता है अगर पहले से कोई नहीं है, और एक नए TJPegImage को असाइन करने से DIB भी असाइन किया जाता है ताकि यह काम न करे। – Dampsquid