Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPEG mit Image32 laden (https://www.delphipraxis.net/55026-jpeg-mit-image32-laden.html)

-NIP- 15. Okt 2005 11:59


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:
Image32.Bitmap.LoadFromFile('bla.jpg');
nicht. Es kommt folgender Fehler:
Delphi-Quellcode:
'Can''t allocate the DIB handle'
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?

Khabarakh 15. Okt 2005 12:06

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: ?)

-NIP- 15. Okt 2005 12:15

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;

MarcoWarm 15. Okt 2005 12:23

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 :)

-NIP- 15. Okt 2005 12:54

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 .

Khabarakh 15. Okt 2005 13:08

Re: JPEG mit Image32 laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Image321.Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + 'ava.jpg');
Klappt bei mir einwandfrei :gruebel: . Vielleicht liegt es auch am JPEG? Versuch es mal mit dem Anhang.

@MarcoWarm: TJPEGImage erstellt intern ein TBitmap, man kann es also ohne Probleme einem anderen Bitmap zuweisen.

-NIP- 15. Okt 2005 13:37

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;

dizzy 15. Okt 2005 14:34

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.

-NIP- 15. Okt 2005 15:48

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?

dizzy 16. Okt 2005 03:37

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: www.wotsit.org

Warum willst du die Größe vor dem Laden des Jpegs wissen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.
Seite 1 von 2  1 2      

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