Kép átméretezése jpeg Big-endian (Motorola, MM) hibásan.
2014-06-30T10:40:34+02:00
2014-07-01T17:58:37+02:00
2022-08-08T23:05:30+02:00
kistikvi
Sziasztok!

Képeket méretezek át Delphi kóddal:

procedure ResizePictureToJPG(var aFName: string; const aTmpPath: string; aNewWidth, aNewHight: integer; aEnableBigger: boolean = False); var jpg: TJPEGImage; bm: TBitmap; pctr: TPicture; begin pctr := TPicture.Create; bm := TBitmap.Create; jpg := TJPEGImage.Create; try pctr.LoadFromFile(aFName); pctr.SaveToFile('_pctr.jpg'); bm.Width := pctr.Width; bm.Height := pctr.Height; bm.Canvas.Draw(0, 0, pctr.Graphic); bm.SaveToFile('_1bm.bmp'); if uScVisual.ResizeBitmap(bm, aNewWidth, aNewHight, aEnableBigger) then begin aFName := aTmpPath + '_' + ExtractFileName(aFName); aFName := SysUtils.ChangeFileExt(aFName, '.jpg'); bm.SaveToFile('_2bm.bmp'); jpg.Assign(bm); jpg.SaveToFile(aFName); end; finally pctr.free; bm.Free; jpg.Free; end; end;
Az eredmény hibásan jelenik meg.
Szinte eltűnik a szín és csíkossá változik, s még el is csúszik, a mellékelt fájlban láthatóan.
A bm.SaveToFile('_1bm.bmp')-nél már nem megfelelő.
Az eredeti képet paint.net ben jpg-ként elmentve, s majd ennek átalakítása már megfelelő.
FastTone ban levágva kisebb méretre, s azt megpróbálva átméretezni az én kódommal, megint nem jó.

Kipróbálva a SourceForge.net: Image Resize (DELPHI) - Project Web Hosting - Open Source Software -et próbálva vagy épp a AwResizeImage -t felhasználva szintén hasonlóan nem jó.

Az Jeffrey Friedl's Exif (Image Metadata) Viewer -ben megnézve :
File - basic information derived from the file.
File Type JPEG
MIME Type image/jpeg
Exif Byte Order Big-endian (Motorola, MM)
Encoding Process Baseline DCT, Huffman coding
Creator Tool Adobe InDesign CS6 (Macintosh)



Tudtok e valami megoldást ajánlani?
Mutasd a teljes hozzászólást!
Csatolt állomány
Tippem: a JPEG-el az a gond, hogy CYMK színtérben van. A Delphi TJpegImage eleve rosszul olvassa be (csak 7-es Delphiben néztem), tehát már az átméretezés előtt kijön a probléma. Amennyire látom, a Delphis JPEG támogatás eleve nem terjed ki CYMK-ra, de van third-party JPEG támogatás a dologra: DelJpegEx.

Egy másik lehetőség third-party kód használata nélkül esetleg, hogy megpróbálod GDI/GDI+ segítségével egy DC-re kirajzolni a képet, HA van JPEG támogatás GDI/GDI+ alatt ÉS támogatja a CYMK JPEG forrásokat, ennek nem jártam utána.
Mutasd a teljes hozzászólást!

abcd