Hallo,
ich versteh die Welt nicht mehr.
Also .. ich möchte ein Bitmap laden/erzeugen und als JPEG komprimieren.
Aber auch gleich das Resultat als Vorschau in der Form anzeigen. Am besten natürlich ohne den Umweg über eine Datei.
Alle möglichen Beispiel im Internet erzeugen aber ein BMP (mit BMP.create) und laden eine Grafik hinein und speichern die als JPG in - genau, in eine Datei.
z.B.
www.scalabium.com/faq/dct0042.htm
Nun, hab ich mir gedacht - könnte man die doch bestimmt auch nach dem Komprimieren direkt anzeigen.
Hab also folgendes geschrieben:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| uses jpeg;
procedure TForm1.Button1Click(Sender: TObject); var Bmp: TBitmap; Jpg: TJPEGImage; begin Bmp := TBitmap.Create; Jpg := TJPEGImage.Create;
image1.picture.LoadFromFile('C:\BILDER\Grafik_1.jpg');
Bmp.assign(image1.picture.Bitmap);
image1.picture.bitmap.assign(bmp); Jpg.Assign(Bmp);
Jpg.CompressionQuality := 90;
JpG.compress;
image2.picture.Bitmap.assign(jpg);
Jpg.Free; Bmp.Free; end; end;
end. |
Mit dem Resultat, daß erst immer nach Durchlaufen der Buttonprozedur immer
"Error 41 in JPEG" kam. Also hab ich testweise entschlackt
und als ich dann selbst beim einfachen Zuweisen zu BMP
bmp.assign(image1.picture.bitmap);
und gleichzeitigem Weglassen des Restes der Prozedur (nach //Exit;) immer nur ein leeres Image1 anggezeigt bekam, war ich total verwundert.
Was mach ich denn falsch?
Danke
Edit:
Ebensowenig geht übrigens folgendes einfache Projekt,welches ich einfach von einer Seite herunterkopiert hab - weil ich dachte, meins wäre zu kompliziert.: [nur image1 und load ergänzt und die Bilder/Pfadnamen angepaßt]
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button3Click(Sender: TObject); var jpeg: TJPEGImage; bmp: TBitmap; begin jpeg := TJPEGImage.Create; bmp := TBitmap.Create; image1.Picture.LoadFromFile('C:\Bilder\Eins.jpg'); try bmp.Assign(image1.Picture.bitmap); jpeg.CompressionQuality := 10; jpeg.Assign(bmp);
jpeg.SaveToFile('C:\Bilder\Zorro.jpg'); finally jpeg.Free; bmp.Free; end; end; |
d.h. wenn ich das Bild "Eins.jpg" lade kommt Zorro.jpg mit Größe NULL heraus.
Lese ich ein jpeg=>Bmp konvertiertes Bild "Eins.bmp" ein, funktioniert alles wunderbar.
WIESO???
gut, offenbar könnte es daran liegen, daß die in Image1 eingelesene Datei auch intern erstmal als JPEG weiterverbleibt, obwhol ich sie mit image1.picture.BITMAP auslese - das scheint wohl nichts zu bewirken.
Aber wie sonst soll man sonst JPEG Bilder als JPEG neukomprimieren können, ohne sie zuvor mit irfanview als BITMAP zu konvertieren?