Entwickler-Ecke
Multimedia / Grafik - Ermitteln der Auflösung eines BitMap bzw. JPEG
karin.rometsch@web.de - Do 05.11.09 08:34
Titel: Ermitteln der Auflösung eines BitMap bzw. JPEG
Hallo Zusammen,
ich versuche die ermittelte Bildgrösse in Pixel umzurechnen in Cm.
Sofern die Auflösung passt, stimmt das Ergebnis.
Kann mir jemand sagen, wie ixh die Auflösung in Pixel ermitteln kann??
Bin dankbar für jeden Tip. :?:
ub60 - Do 05.11.09 09:22
Suchst Du die Auflösung (Punkte je Zoll) des Gerätes? Für den Drucker geht das so:
Delphi-Quelltext
1: 2:
| hdpi:=GetDeviceCaps(Printer.Handle,LogPixelsX); vdpi:=GetDeviceCaps(Printer.Handle,LogPixelsY); |
ub60
karin.rometsch@web.de - Do 05.11.09 12:49
Nein. Ich würde gerne die Breite/Höhe in Pixel eines Bitmaps oder Jpegs umrechnen in cm.
Wo bekomme ich für die Grafik die Auflösung in Pixel her.
(Siehe Paint, Attribute eines Bildes),
:lol:
Hugo343 - Do 05.11.09 16:24
ich denke das wenn du das gewünschte bild in ein TPicture lädst daraus auch die maße auslesen kannst....
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormCreate(Sender: TObject); var Bild:TPicture; Höhe,Breite:integer; begin Bild:=TPicture.Create; Bild.loadfromfile('C:\bla.bmp'); Höhe:=Bild.Graphic.Height; Breite:=Bild.Graphic.Width; end; |
Das funktioniert, habs ausprobiert! :wink:
flieger-michl - Mi 27.10.10 17:33
Hast Du eine Lösung für Dein Problem gefunden?
Ich suche auch nach der Möglichkeit die Auflösung eines Bildes zu ermitteln.
Gruß
Micha
elundril - Mi 27.10.10 18:20
Bitmaps und JPegs sollten eigentlich einen Header haben in dem das drin steht. (So wie eigentlich alle Bilddateien),
Beim Bitmap zb ist die Breite des Bitmaps ab dem Offset 12 (Hex) gespeichert und belegt den Speicherplatz von einem Int64-Typ, die Höhe ist dann ab dem offset 16 gespeichert und ebenfalls so lang wie ein Int64-Typ braucht. Bei der Höhe musst du aufpassen, denn es kann sein das sie negativ ist (Bottom-Up-Bitmap). Ändert nicht großartig viel, du musst lediglich dann den positiven Wert der Zahl nehmen.
Bei Jpegs steht die Breite beim Offset 2 und ist 2 Byte lang und die höhe beim offset 4 und ist 2 Byte lang. (Was glaub ich einem normalen integer entspricht). Wenn man Wikipedia aber glauben darf, ist ein Header nicht zwingend vorgeschrieben bei JPEGs, demnach kann man sich nicht auf diese informationen 100% verlassen.
Auslesen kann man den Spass jetzt mit Filestreams.
lg elundril
Gerd Kayser - Mi 27.10.10 18:33
elundril hat folgendes geschrieben : |
ist 2 Byte lang. (Was glaub ich einem normalen integer entspricht). |
2 Bytes = 1 Word
jaenicke - Mi 27.10.10 19:33
flieger-michl hat folgendes geschrieben : |
Ich suche auch nach der Möglichkeit die Auflösung eines Bildes zu ermitteln. |
Bei Bitmaps wird diese Angabe in der Regel gar nicht gesetzt. Die angegebene Berechnung basiert in der Regel auf der Auflösung des Zielgeräts, z.B. des Druckers oder des Monitors.
Beim Ausdruck wird daher normalerweise entsprechend skaliert. Bei JFIF Dateien bin ich mir nicht sicher, ob die eine solche Angabe haben, aber ich vermute es.
elundril hat folgendes geschrieben : |
Bitmaps und JPegs sollten eigentlich einen Header haben in dem das drin steht. (So wie eigentlich alle Bilddateien) |
Da steht das aber in Pixel, zumindest die Ausgangsfrage war ja eben gerade wie man das dann umrechnen kann. ;-)
Delete - Do 28.10.10 00:36
Die Größe in Zentimetern ist eben abhängig von der Auflösung des Zielgerätes. Es gibt also nicht DIE Größe in Zentimetern.
flieger-michl - Do 28.10.10 10:44
Im BitmapInfoHeader gibt es die Felder xPelsperMeter und yPelsperMeter welche aber fast immer auf 0 stehen.
Rechtsklicke mal im Explorer eine beliebige Bilddatei und gehe auf Eigenschaften und dann Dateiinfo.
Da zeigt er trotzdem für jedes Bild eine Horizontale Auflösung und eine Vertikale Auflösung.
Mir ist schon klar, daß diese Information nur vom Aufnahmegerät kommen kann.
Gibt es keine Shellfunktion mit der man diese Dateiinfos abfragen kann?
Ich brauche diese Information, weil ich einen Bauplan im Maßstab 1:1 ausdrucken will. Ich weiß auch die Auflösung des Ausgabegerätes (Drucker). Um die Zeichnung aber nun 1:1 zu bekommen, muß ich noch wissen, mit wieviel DPI die Grafik eingescannt wurde.
Gruß
Michl
FinnO - Do 28.10.10 14:31
Moin,
du kannst ja einfach auf dem Bauplan einen inch-long-Strich aufzeichnen. Jetzt musst du eigentlich nur scannen, zählen, fertig.
LG
justus - Do 28.10.10 17:04
flieger-michl hat folgendes geschrieben : |
Im BitmapInfoHeader gibt es die Felder xPelsperMeter und yPelsperMeter welche aber fast immer auf 0 stehen.
Rechtsklicke mal im Explorer eine beliebige Bilddatei und gehe auf Eigenschaften und dann Dateiinfo.
Da zeigt er trotzdem für jedes Bild eine Horizontale Auflösung und eine Vertikale Auflösung.
Mir ist schon klar, daß diese Information nur vom Aufnahmegerät kommen kann.
Gibt es keine Shellfunktion mit der man diese Dateiinfos abfragen kann?
Ich brauche diese Information, weil ich einen Bauplan im Maßstab 1:1 ausdrucken will. Ich weiß auch die Auflösung des Ausgabegerätes (Drucker). Um die Zeichnung aber nun 1:1 zu bekommen, muß ich noch wissen, mit wieviel DPI die Grafik eingescannt wurde.
Gruß
Michl |
Die Auflösung muß nicht immer zwangsläufig angegeben sein. Ich vermute stark, dass der Windowsexplorer und Photoshop einfach eine Auflösung von 72dpi annehmen, wenn die keine Auflösunginfos finden. So habe ich es mal in einem Programm gemacht. Was das auslesen von Jpeg und Tiff angeht, so muß man sich wohl mit der Formatdefinition auseinandersetzen. Bei Bilder aus der Kamera kommt noch hinzu, dass die Auflösung unter anderem in Exifteil gespeichert werden können.
Als erstes würde ich mal die Bildaten mit einem Programm wie Adobe Photoshop öffnen und überprüfen, ob überhaupt brauchbare dpi Werte hinterlegt sind. Wenn ja, dann mit den Formatdefinitionen auseinandersetzen. Um welche Dateiformate handelt es sich denn?
Lg,
jus
Gerd Kayser - Fr 29.10.10 00:01
Beim Scannen kann man die Auflösung einstellen. Die ist somit bekannt. Die horizontale und vertikale Druckerauflösung ist auch bekannt, wenn man sie abfragt. Die Bildauflösung kann man auch abfragen.
DPI = Pixel pro Zoll
1 Zoll = 25,4 mm
Der Rest ist Dreisatz...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!