![]() |
JPEG mit Image32 laden
Hi!
In letzter Zeit bin ich in richtiger Graphics32-Hochstimmung. Ich habe jedoch jetzt ein Problem: Trotz eingebundener JPEG-Unit klappt das Laden beim Image32 über
Delphi-Quellcode:
nicht. Es kommt folgender Fehler:
Image32.Bitmap.LoadFromFile('bla.jpg');
Delphi-Quellcode:
Ich habe es schon mit einem JPEGImage probiert das auf das Bitmap drauf assigned wird, das erzeugt jedoch den gleichen Fehler. Und auch BitBlt ist nicht möglich, da das JPEGImage kein Canvas.Handle hat. Also wie lade ich jetzt JPEGS?
'Can''t allocate the DIB handle'
|
Re: JPEG mit Image32 laden
Ich bin mir nicht sicher (weill ich fast nur noch PNG benutze :wink: ), aber es sollte funktionieren, wenn du ein TJPEGImage erstellst und dessen Inhalt in ein TBitmap und diesen wiederum in dein TBitmap32 kopierst.
(War dieser Satz grammatikalisch korrekt :gruebel: ?) |
Re: JPEG mit Image32 laden
Naja das habe ich gerade probiert. Auf einmal gibt es einen Fehler bei der Erstellung der MDIChildForm, wo das Ganze beim createn stattfindet, und zwar:"Falscher Parameter"
Also das JPEG Bild habe ich auf das Bitmap assigned und das Bitmap dann wiederum auf das Bitmap32 vom Image32.
Delphi-Quellcode:
if (ExtractFileExt(MainForm.OpenPictureDialog1.FileName)='.jpg')or
(ExtractFileExt(MainForm.OpenPictureDialog1.FileName)='.jpeg')or (ExtractFileExt(MainForm.OpenPictureDialog1.FileName)='.JPG')or (ExtractFileExt(MainForm.OpenPictureDialog1.FileName)='.JPEG') then begin JPEGBild:=TJPEGImage.Create; JPEGBild.LoadFromFile(MainForm.OpenPictureDialog1.FileName); ZwischenBitmap:=TBitmap.Create; ZwischenBitmap.Width:=Breite; ZwischenBitmap.Height:=Hoehe; ZwischenBitmap.Assign(JPEGBild); JPEGBild.Free; Bild_Img32.Bitmap.Assign(ZwischenBitmap); ZwischenBitmap.Free; exit; end; |
Re: JPEG mit Image32 laden
Ihr solltet bedenken, daß Image32.Bitmap ein Bitmap (*.bmp) verlangt. Ein TJPEGImage ist von TGraphic abgeleitet (hab grad kein Delphi zum nachschauen da) also solltest du es auch Image32.Graphic assignen.
Es sollte auch Image32.Picture.LoadFromFile oder sowas geben... Damits geht es dann wohl... aber alles unter vorbehalt, da ich nur TImage benutze, wo selbiges geht :) |
Re: JPEG mit Image32 laden
Das Problem ist, dass es kein Image32.Graphic gibt und das Gegenstück zu Image.Picture.LoadFromFile ist Imag32.Bitmap.LoadFromFile , welches wie gesagt schon versagt hat :D .
|
Re: JPEG mit Image32 laden
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Klappt bei mir einwandfrei :gruebel: . Vielleicht liegt es auch am JPEG? Versuch es mal mit dem Anhang.
Image321.Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + 'ava.jpg');
@MarcoWarm: TJPEGImage erstellt intern ein TBitmap, man kann es also ohne Probleme einem anderen Bitmap zuweisen. |
Re: JPEG mit Image32 laden
Ahaaaa! Ich hab den Bösetäter gefunden:
Anscheinend gibt es einen Fehler bei der Prozedur, die mir die Breite und die Höhe des geöffneten Bildes holt. Der Fehler tritt aber nur mit JPEGS auf. Hier ist die Prozedur:
Delphi-Quellcode:
procedure AbmessungenErmitteln(aFile:String);//Abmessungen des
var //geöffneten fileheader: TBitmapfileheader; //Bildes errechnen infoheader: TBitmapinfoheader; //und abspeichern s: TFilestream; begin s := TFileStream.Create(aFile, fmOpenRead); try s.Read(fileheader, SizeOf(fileheader)); //Nach dem filehaeder beginnt der infoheader s.Read(infoheader, SizeOf(infoheader)); Breite:=infoheader.biWidth; Hoehe:=infoheader.biHeight; finally s.Free; end; end; |
Re: JPEG mit Image32 laden
Wie wäre es nach dem Laden mit TJPEGImage.Width bzw. .Height? :zwinker:
\\edit: Mit der obigen Funktion kann das ja auch garnicht gehen... Du versuchst einen *.bmp Header auszuwerten, aber ein JPEG-Header wird deutlich anders aussehen - somit steht nachher auch völliger Quatsch in deinen Variablen. |
Re: JPEG mit Image32 laden
Wenn ich die Größe des JPEGs einstellen möchte, sagt er die:"Die Größe kann nicht verändert werden" oder sowas. Wo kann man sich denn die Fileheader anschauen, um eventuell selber die "Abmessungen"-Funktion zu erweitern?
|
Re: JPEG mit Image32 laden
Du kannst die Höhe und Breite eines TJPEGImages nicht ändern. Dazu musst du zunächst zu einem TBitmap assignen und dann mit einer beliebigen Methode stretchen. Wenn du das wieder als jpeg speichern willst, musst du es vom Bitmap aus wieder einem TJPEGImage assignen.
In Sachen Fileheader: ![]() Warum willst du die Größe vor dem Laden des Jpegs wissen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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 by Thomas Breitkreuz