![]() |
Image-Resize und abspeichern mit Qualität
Hallo,
hab schon viel gesucht, aber keine Hilfe gefunden. Ich mache eine Screenshot und lad den in die Image32-Kompo der GL32. Der Screenshot soll auf 160x120 verkleinert werden. Allerdings bekomm ich das nicht hin, das er das in der Image32-Kompo verkleinerte Bild auch so abspeichert. Er speichert es immer wieder 1:1 ab. Was mache ich falsch???
Delphi-Quellcode:
begin
sourceBitmap := TBitmap.Create; targetBitmap := TBitmap.Create; bmp := TBitmap.Create; jpeg := TJPEGImage.Create; try try {********** In sourceBitmap befindet sich der Screenshot ***********} // Resize the src bitmap Mainform.jpgImage.Bitmap.Assign(sourceBitmap); Mainform.jpgImage.width := 160; Mainform.jpgImage.Height := 120; Mainform.jpgImage.ScaleMode := smResize ; // Create a JPEG from the Bitmap and save it bmp.Assign(Mainform.jpgImage.Bitmap); jpeg.Assign(bmp); JPeg.CompressionQuality := 75; jpeg.SaveToFile('thumpnail.jpg'); finally jpeg.Free; sourceBitmap.Free; targetBitmap.Free; bmp.Free; end; except // Error Code end; end; |
Re: Image-Resize und abspeichern mit Qualität
Hi,
dein Fehler liegt hier Zitat:
Dann kopierst du einfach mittels StretchBlt die Informatioen und dann klappts auch mit der Größe Gruß Der Unwissende |
Re: Image-Resize und abspeichern mit Qualität
mh, versteh ich ne ganz, denn mit
bmp.Assign(Mainform.jpgImage.Bitmap); weiße ich doch dem bitmap eigentlich die größe des Image32 zu! dann sollte das bitmap auch die geändert eigenschaften haben. die verkleinerung will ich ja aber über die kompo Image32, wegen der interpolation. also da brauch ich doch kein StretchBlt, oder? |
Re: Image-Resize und abspeichern mit Qualität
Zitat:
|
Re: Image-Resize und abspeichern mit Qualität
@TriphunEM
Wenn du OOP anwendest brauchst das MainForm nicht mitschreiben in deinem Code! |
Re: Image-Resize und abspeichern mit Qualität
so ich hänge mich mal hier ran, da mein Problem weiterführend ist.
Wenn ich das Bild abspeichere mit
Delphi-Quellcode:
Wird nicht das interpolierte Bild gespeichert, sondern das original, welches mir ja nix nutzt.
image32.bitmap.savetofile('c:\test2.bmp');
Also habe ich als workaround das vorgeschlagene BitBlt genutzt.
Delphi-Quellcode:
Aber das gespeicherte Bild ('test_bmp.bmp') enthält keinen Header, sodass das IrfanView es nicht öffnen kann.
function TImageFrame.SetResolution(iResX : integer; iResY : integer) : Boolean;
var my1bmp :Tbitmap; begin try my1bmp := TBitmap.create; image32.Bitmap.LoadFromFile(EmpfangsTelegramm.sDateiname); image32.width := iResX; image32.Height := iResY; image32.ScaleMode := smResize ; image32.Resize; //image32.bitmap.savetofile('c:\test2.bmp'); // Funzt net da Bild aus dem Speicher und nicht aus der Komponente entnommen wird. BitBlt(image32.Bitmap.Handle,0,0,image32.width,Image32.height,my1bmp.Handle,0,0,srcCopy); my1bmp.SaveToFile('C:\test_bmp.bmp'); finally my1bmp.free; end; end; Möchte aber nach Möglichkeit die Datei nicht öffnen mich durchparsen und den Header "manuell" einfügen Hat jemand ne Lösung oder nen Denkanstoss. danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz