![]() |
Grafikformat prüfen
Hallo,
wie kann ich denn ein Bild auf das Format prüfen? Die Grafik wird in eine Komponenteneigenschaft (TGraphic) geladen. Um sie auf dem Canvas darstellen zu können, müßte ich wissen welches Format dahintersteckt. Ich bräuchte sowas, If "graphivproperty" is TPNG oder .... is TJPEG oder .... is TGIF usw. Vielleicht kann mir jemand weiterhelfen. Danke. Josef |
AW: Grafikformat prüfen
Die meisten Grafikformate haben einen Dateiheader. Den kannst du auslesen.
|
AW: Grafikformat prüfen
Gibt auch Libs, die dir das abnehmen. Vampyre Imaging Library zB.
|
AW: Grafikformat prüfen
Ich glaube er meint etwas einfaches. Ich komm jetzt auch nicht drauf, aber es gibt eine einfache Möglichkeit den geladenen Grafiktyp in TPicture zu ermitteln.
|
AW: Grafikformat prüfen
Wenn das Bild schon in TGraphic drinsteckt, dann kannst du natürlich auch direkt den Typ der Graphic-Instanz prüfen.
[edit]
Delphi-Quellcode:
eventuell hilft auch
(Picture.Graphic is TBitmap) = ein Bitmap
usw.
Delphi-Quellcode:
GetFileFormats.BuildFilterStrings(TGraphicClass(Picture.Graphic.ClassType), Descriptions, Filters);
ShowMessage(Descriptions + sLineBreak + Filters); |
AW: Grafikformat prüfen
@Popov
Die Ebene TPicture liegt über TGraphic ... Natürlich geht etwas in der Art
Delphi-Quellcode:
hier scheint es aber darum zu gehen in Abhängigkeit eines zu ladenden Streams (bei einer Datei hätte man ja die Extension) die richtige Klasse für die Zuordnung zu TGraphic als Containerzu erzeugen.
if image1.Picture.Graphic is TJpegImage then Showmessage('jpg')
|
AW: Grafikformat prüfen
Stimmt.
Zitat:
Nja, entweder man holt/speichert dort, von wo der Stream, bzw. das Bild kommt, auch das noch Format und schon hat man es. Ansonsten kann man es natürlich auch auf die brutale Variante (Bruteforce) versuchen. - alle bekannten Graphic-Typen (TBitmap, TJPegImage, ...) durchprobieren und da wo es nicht knallt, dort passt vermutlich das Bild rein. :stupid: |
AW: Grafikformat prüfen
Zitat:
Oder willst du noch dazu malen, was für ein Format dahintersteckt? |
AW: Grafikformat prüfen
Ganau das Gleiche wollte ich eigentlich auch fragen, hab mich aber nicht getraut :oops:
|
AW: Grafikformat prüfen
Hallo,
vielen Dank für die Antworten. Ich hab mal die Sachen, die diese Zeichnerei in der Komponente machen, ausgeklammert. Und siehe da: Es kommt immer noch "Abstrakter Fehler". Dann hab ich mal die Zeichnerei in das OnPaint Ereignis eines Formulars kopiert. //******************************************* procedure TForm1.FormPaint(Sender: TObject); var ico:TIcon; bmp:TGraphicExGraphic; begin try try bmp:=TGraphicExGraphic.create; bmp.PixelFormat:=pf32bit; if not (image1.Picture.Graphic is TIcon) then begin bmp.Assign(image1.Picture.Graphic); canvas.StretchDraw(clientrect,bmp); end else begin ico:=TIcon.create; ico.Assign(image1.Picture.Icon); canvas.StretchDraw(clientrect,ico); end; finally FreeAndNil(bmp); FreeAndNil(ico); end; except Showmessage('Ungültiges Bildformat'); end; end; //************************************** ... und da funktioniert das Ganze. Was mir aber auffiel: Es wurden etliche Graphic-Filter-pas-Dateien in die uses von form1 geschrieben, je nachdem, welchen Graphic Typ ich in das Image geladen hatte. Z.B. LMDPNGImage, jpeg. Ich hatte die uses nur um "graphicEx" erweitert. Mein "Abstakter Fehler" liegt wo anders in meinem Komponentencode. Nur wo????? Beim Kompilieren des Packages kommt kein Fehler. Erst wenn ich die neue Komponente auf dem Formular plaziere und was an den Properties einstellen will. Weiß jemand wo man bei sowas am Besten anfängt zu suchen? Danke Josef |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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