Autor |
Beitrag |
karin.rometsch@web.de
Hält's aus hier
Beiträge: 7
Win2000, Win XP, Vista
Delph 2007i; C#; Delphi Prism
|
Verfasst: Do 05.11.09 08:34
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
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: 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 
Hält's aus hier
Beiträge: 7
Win2000, Win XP, Vista
Delph 2007i; C#; Delphi Prism
|
Verfasst: 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),

|
|
Hugo343
      
Beiträge: 114
Erhaltene Danke: 2
Windows 7
Turbo Delphi, Dev C++
|
Verfasst: 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! 
|
|
flieger-michl
Hält's aus hier
Beiträge: 14
W2K, Linux
D5, FPC
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 27.10.10 19:33
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
Hält's aus hier
Beiträge: 14
W2K, Linux
D5, FPC
|
Verfasst: 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
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: 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
Hält's aus hier
Beiträge: 6
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: 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...
|
|