AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Grafikformat prüfen

Ein Thema von josefkoller · begonnen am 30. Okt 2012 · letzter Beitrag vom 31. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
josefkoller

Registriert seit: 22. Okt 2012
49 Beiträge
 
#1

Grafikformat prüfen

  Alt 30. Okt 2012, 20:56
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Grafikformat prüfen

  Alt 30. Okt 2012, 21:18
Die meisten Grafikformate haben einen Dateiheader. Den kannst du auslesen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Grafikformat prüfen

  Alt 30. Okt 2012, 21:55
Gibt auch Libs, die dir das abnehmen. Vampyre Imaging Library zB.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Grafikformat prüfen

  Alt 30. Okt 2012, 22:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#5

AW: Grafikformat prüfen

  Alt 30. Okt 2012, 22:31
Wenn das Bild schon in TGraphic drinsteckt, dann kannst du natürlich auch direkt den Typ der Graphic-Instanz prüfen.

[edit]
Delphi-Quellcode:
(Picture.Graphic is TBitmap) = ein Bitmap
usw.
eventuell hilft auch
Delphi-Quellcode:
GetFileFormats.BuildFilterStrings(TGraphicClass(Picture.Graphic.ClassType), Descriptions, Filters);
ShowMessage(Descriptions + sLineBreak + Filters);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Okt 2012 um 22:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Grafikformat prüfen

  Alt 30. Okt 2012, 22:32
@Popov
Die Ebene TPicture liegt über TGraphic ...
Natürlich geht etwas in der Art
if image1.Picture.Graphic is TJpegImage then Showmessage('jpg') 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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#7

AW: Grafikformat prüfen

  Alt 30. Okt 2012, 22:41
Stimmt.

Zitat:
Die Grafik wird in eine Komponenteneigenschaft (TGraphic) geladen
Klang aber danach, daß es schon reingeladen wurde.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Grafikformat prüfen

  Alt 30. Okt 2012, 22:47
Die Grafik wird in eine Komponenteneigenschaft (TGraphic) geladen. Um sie auf dem Canvas darstellen zu können, müßte ich wissen welches Format dahintersteckt.
Wieso das denn, wenn das Bild da drin ist, einfach auf den Canvas malen ...
Oder willst du noch dazu malen, was für ein Format dahintersteckt?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Grafikformat prüfen

  Alt 31. Okt 2012, 03:46
Ganau das Gleiche wollte ich eigentlich auch fragen, hab mich aber nicht getraut
  Mit Zitat antworten Zitat
josefkoller

Registriert seit: 22. Okt 2012
49 Beiträge
 
#10

AW: Grafikformat prüfen

  Alt 31. Okt 2012, 11:44
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz