이미지를 imgQInput (TImage)에로드하고 TJpegImage에 할당하고 압축 (압축률 5)하고 imgQOutput (다른 TImage)에 표시하려고합니다. 그러나 그것은 효과가 없습니다. imgQOutput의 이미지는 원본과 같습니다. 그것은 압축 요소 때문에 매우 pixelated 봐야합니다! 그러나 압축은 JPEG를 디스크에 저장할 때 실제로 작기 때문에 작동합니다.JPEG 이미지를 압축하여 화면에 표시 할 수 없습니다.
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는 압축이 작동하고 파일/스트림에 저장하면 압축 된 JPeg를 저장하고 TImage에 할당하더라도 비트 맵 DIB와 JPegData를 모두 보유합니다. 그림 대신 원본 이미지 인 Vahid 's를 그대로두고 DIB를 사용합니다. 대답은 스트림에서 JPEG를 다시로드하여 DIB를 지우므로 작동합니다. – Dampsquid
Dampsquid에게 감사드립니다. 스트림에서 다시로드하지 않고도이를 수행 할 수있는 또 다른 방법이 있습니까? Jpeg 필요합니까? – Ampere
나는 하나도 찾지 못했고 DIBNeeded는 이미 하나가없는 경우에만 DIBNeeded를 생성하고, 새로운 TJPegImage에 할당하면 DIB도 할당하므로 나도 작동하지 않습니다. – Dampsquid