Autor Beitrag
karin.rometsch@web.de
Hält's aus hier
Beiträge: 7

Win2000, Win XP, Vista
Delph 2007i; C#; Delphi Prism
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Do 05.11.09 09:22 
Suchst Du die Auflösung (Punkte je Zoll) des Gerätes? Für den Drucker geht das so:

ausblenden Delphi-Quelltext
1:
2:
hdpi:=GetDeviceCaps(Printer.Handle,LogPixelsX);
vdpi:=GetDeviceCaps(Printer.Handle,LogPixelsY);

ub60
karin.rometsch@web.de Threadstarter
Hält's aus hier
Beiträge: 7

Win2000, Win XP, Vista
Delph 2007i; C#; Delphi Prism
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114
Erhaltene Danke: 2

Windows 7
Turbo Delphi, Dev C++
BeitragVerfasst: 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....

ausblenden 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; // erst createn

  Bild.loadfromfile('C:\bla.bmp'); // dann laden

  Höhe:=Bild.Graphic.Height; //und dann auslesen
  Breite:=Bild.Graphic.Width;
end;


Das funktioniert, habs ausprobiert! :wink:
flieger-michl
Hält's aus hier
Beiträge: 14

W2K, Linux
D5, FPC
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mi 27.10.10 18:33 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
ist 2 Byte lang. (Was glaub ich einem normalen integer entspricht).
2 Bytes = 1 Word
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.10.10 19:33 
user profile iconflieger-michl hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
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. ;-)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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



BeitragVerfasst: Do 28.10.10 17:04 
user profile iconflieger-michl hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: 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...