Intento cargar una imagen en imgQInput (que es un TImage), asignarla a TJpegImage, comprimirla (factor de compresión 5) y mostrarla en imgQOutput (otro TImage). Pero no funciona. La imagen en imgQOutput es la misma que en el original. ¡Debería verse MUY pixelado debido al factor de compresión! La compresión funciona sin embargo, porque cuando guardo el JPEG en el disco, es realmente pequeño.No puedo comprimir una imagen JPEG y mostrarla en la pantalla
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 contiene tanto DIB de mapa de bits como JPegData, aunque la compresión funciona y el guardar en archivo/secuencia guarda el JPeg comprimido, asignándolo a un TImage.Picture utiliza el DIB en lugar de dejarle la imagen original, Vahid's La respuesta funciona porque ha vuelto a cargar el JPeg desde la transmisión, borrando así el DIB. – Dampsquid
Gracias Dampsquid. ¿Hay otra forma de hacerlo sin volver a cargarlo desde la transmisión? Al igual que JpegNeeded o así? – Ampere
Nunca encontré una, DIBNeeded solo crea una si ya no hay una, y la asignación a una nueva TJPegImage también asigna DIB para que no funcione tampoco. – Dampsquid