Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Auflösung von Grafiken ermitteln

35 views
Skip to first unread message

Wendelin Uez

unread,
Aug 21, 2023, 5:26:42 PM8/21/23
to
Im BMP-Bildformat enthält der Header die Auflösung dpi für x- und
y-Richtung.

Gibt es eine Funktion, mit der man die dpi-Werte auslesen/ermitteln kann,
idealerweise auch für andere von VB akzeptierte Bildformate wie z.B. JPG?

Die ScaleX-/ScaleY-Methode enthält einen Skalenparameter vbHimetric, aber
ich bin noch nicht dahintergekommen, ob er die gesuchte Umrechnung von Pixel
auf Längeneinheit bietet und so den dpi-Wert zu berechnen erlaubt.

Klaus Ketelaer

unread,
Aug 22, 2023, 4:55:56 AM8/22/23
to
Das sollte eigentlich über die normalen, erweiterten Windows
Dateiattribute gehen. Alles, was Windows im Explorer unten
zu Bildern oder Videos anzeigt, das kann man auch selber
auslese. Ich hole mir so die Thumbnails zu Bildern und Videos.

Wo kommt man eigentlich mit VB klar, ohne mit Himetric klar
zu kommen?

With picPreview
iWidth = .ScaleX(.Picture.Width, vbHimetric, vbTwips)
iHeight = .ScaleY(.Picture.Height, vbHimetric, vbTwips)
End With

Die Werte kann man wie gewohnt von hü nach hot umrechnen...

HTH

Klaus

Klaus Ketelaer

unread,
Aug 22, 2023, 4:59:24 AM8/22/23
to
Man kann himetric auch einfach zu Fuße umrechnen

iWidth = CInt(((oPic.Width / 2540) * 1440) / Screen.TwipsPerPixelX)
iHeight = CInt(((oPic.Height / 2540) * 1440) / Screen.TwipsPerPixelY)

Wendelin Uez

unread,
Aug 22, 2023, 7:23:41 AM8/22/23
to
> Wo kommt man eigentlich mit VB klar, ohne mit Himetric klar
> zu kommen?

Ich verlasse mich seit jeher, wann immer es geht, auf eigene Funktionen oder
Umrechnungen und habe diese - in meinen Augen nicht besonders gut
dokumentierte - Methode deshalb nie benutzen müssen.


Wendelin Uez

unread,
Aug 22, 2023, 7:23:41 AM8/22/23
to

> Man kann himetric auch einfach zu Fuße umrechnen

Das war im Prinzip mein Problem: Was ist der Unterschied zwischen vbPixels
und himetric?


> iWidth = CInt(((oPic.Width / 2540) * 1440) / Screen.TwipsPerPixelX)
> iHeight = CInt(((oPic.Height / 2540) * 1440) / Screen.TwipsPerPixelY)


Zwei Konstanten, von denen man später nicht mehr unbedingt weiß, wie sie
zustande kamen.

Da halte ich mich lieber an

cm2twips = <cm>[cm] x 72 [dots/inch] x 20 [twips/dot] / 2.54 [cm/inch]

und weiß dann, daß ich ggfs. die 72 durch 90 oder sonstwas ersetzen muß.

Und diese Auflösung (72 oder eben mehr) will ich aus der Bilddatei
entnehmen. Zumindest bei BMPs steht sie im Header, bei anderen also sehr
wahrscheinlich auch.

Klaus Ketelaer

unread,
Aug 22, 2023, 1:17:35 PM8/22/23
to
Halte dich lieber an M$ und lass vb himetric zu sonstwas umrechnen.
Du darfst mir glauben, dass VB das fehlerfrei macht...

Klaus Ketelaer

unread,
Aug 22, 2023, 1:29:03 PM8/22/23
to
Wer das hier, aus der Standard VB Hilfe als schlecht dokumentiert
bezeichnet, den verstehe ich nicht. Zu Scale brauchte ich noch nie
eine Doku, weil die Parameter der Methode selbsterklärend sind.
Zumindest für mich...


<VB>
ScaleX, ScaleY Methods

Converts the value for the width or height of a Form, PictureBox, or
Printer from one of the ScaleMode property's unit of measure to another.
Doesn't support named arguments.

Syntax

object.ScaleX (width, fromscale, toscale)

object.ScaleY (height, fromscale, toscale)

The ScaleX and ScaleY method syntaxes have these parts:

Part Description
object Optional. An object expression that evaluates to an object in the
Applies To list. If object is omitted, the Form object with the focus is
assumed to be object.
width Required. Specifies, for object, the number of units of measure to
be converted.
height Required. Specifies, for object, the number of units of measure
to be converted.
fromscale Optional. A constant or value specifying the coordinate system
from which width or height of object is to be converted, as described in
Settings. The possible values of fromscale are the same as for the
ScaleMode property, plus the new value of HiMetric.
toscale Optional. A constant or value specifying the coordinate system
to which width or height of object is to be converted, as described in
Settings. The possible values of toscale are the same as for the
ScaleMode property, plus the new value of HiMetric.


Settings

The settings for fromscale and toscale are:

Constant Value Description
vbUser 0 User-defined: indicates that the width or height of object is
set to a custom value.
vbTwips 1 Twip (1440 twips per logical inch; 567 twips per logical
centimeter).
vbPoints 2 Point (72 points per logical inch).
vbPixels 3 Pixel (smallest unit of monitor or printer resolution).
vbCharacters 4 Character (horizontal = 120 twips per unit; vertical =
240 twips per unit).
vbInches 5 Inch.
vbMillimeters 6 Millimeter.
vbCentimeters 7 Centimeter.
vbHimetric 8 HiMetric. If fromscale is omitted, HiMetric is assumed as
the default.
vbContainerPosition 9 Determines control's position.
vbContainerSize 10 Determines control's size.


Remarks

The ScaleX and ScaleY methods take a value (width or height), with its
unit of measure specified by fromscale, and convert it to the
corresponding value for the unit of measure specified by toscale.

You can also use ScaleX and ScaleY with the PaintPicture method.
</VB>

Wendelin Uez

unread,
Aug 23, 2023, 6:39:28 AM8/23/23
to
> Wer das hier, aus der Standard VB Hilfe als schlecht dokumentiert
> bezeichnet, den verstehe ich nicht.

Man kann aber nur vermuten, daß eine Umrechnung von himetric in ein
Längenmaß die in der Grafik enthaltene spezifische Auflösung nutzt und nicht
eine mehr oder weniger oft passende Konstante.Weiß man's?

Was passiert, wenn die Grafik gar keine Auflösung gespeichert haben sollte,
steht erst recht nirgends.




Wendelin Uez

unread,
Aug 23, 2023, 6:39:28 AM8/23/23
to
> Halte dich lieber an M$ und lass vb himetric zu sonstwas umrechnen.
> Du darfst mir glauben, dass VB das fehlerfrei macht...

Solange ich nicht sicher weiß, was hinter himetric genau steckt, butze ich
es lieber nicht.

Und was die Präzision von MS respekive VB betrifft, zeichne einfach mal ein
Rechtick mit vier einzelnen LINE-Befehlen und einem mit B-Option und
vergleiche das Ergebnis pixelgenau.

Klaus Ketelaer

unread,
Aug 23, 2023, 9:29:25 AM8/23/23
to
Am 23.08.2023 um 12:11 schrieb Wendelin Uez:
>> Halte dich lieber an M$ und lass vb himetric zu sonstwas umrechnen.
>> Du darfst mir glauben, dass VB das fehlerfrei macht...
>
> Solange ich nicht sicher weiß, was hinter himetric genau steckt, butze
> ich es lieber nicht.

Wenn man nicht weiss, was hinter himetric steckt, dann sollte man
einfach mal Google nach himetric suchen lassen.

"Ein Himetric ist ein Tausendstel eines Zentimeters, also 0,01
Millimeter" heisst es da gleich im ersten Treffer.

Aber deine Google-Allergie ist ja bekannt;-)

>
> Und was die Präzision von MS respekive VB betrifft, zeichne einfach mal
> ein Rechtick mit vier einzelnen LINE-Befehlen und einem mit B-Option und
> vergleiche das Ergebnis pixelgenau.

Ich weiss, es ist schwer zu verstehen. Aber himetric ist eine Maßeinheit
die VB durchaus umrechnen kann.



Klaus Ketelaer

unread,
Aug 23, 2023, 9:40:12 AM8/23/23
to
Am 23.08.2023 um 12:38 schrieb Wendelin Uez:
>> Wer das hier, aus der Standard VB Hilfe als schlecht dokumentiert
>> bezeichnet, den verstehe ich nicht.
>
> Man kann aber nur vermuten, daß eine Umrechnung von himetric in ein
> Längenmaß die in der Grafik enthaltene spezifische Auflösung nutzt und
> nicht eine mehr oder weniger oft passende Konstante.Weiß man's?

Man kann davon ausgehen, dass himetric die breite und Höhe des Bildes
in himetric ausgibt. Das widerum rechnen normale VB-Nutzer mittels
scale in Twips, Pixel, mm, cm, oder was auch immer um.

>
> Was passiert, wenn die Grafik gar keine Auflösung gespeichert haben
> sollte, steht erst recht nirgends.

Was ist denn in einer Std-Bitmap gespeichert? Hast Du da schon mal
Angaben zur Auflösung entdeckt? Ich nicht. Ich sehe da immer nur
farbige Pixel...

Wendelin Uez

unread,
Aug 23, 2023, 12:00:14 PM8/23/23
to
> Was ist denn in einer Std-Bitmap gespeichert? Hast Du da schon mal
> Angaben zur Auflösung entdeckt? Ich nicht. Ich sehe da immer nur
> farbige Pixel...

Mir gab da grad einer einen Super-Tipp von wegen Google und so, du weiß
schon, da habe ich ganz ungeniert nach BITMAP FORMAT gegoogelt und bin
sofort darauf gestoßen:
https://www.pohlig.de/Unterricht/Inf2004/Kap27/27.3_Das_bmp_Format.htm

Die Auflösung steht bei BMPs im Header Byte 38-45.
Da Headerauslesen relativ umständlich ist und außerdem bei jeder Dateiart
anders hatte ich auf eine entsprechende Windows-Funktion gehofft.

Ohne die Auflösung kann ich zwar eine Bitmap auf jede beliebige Größe
bringen, aber es macht schon einen Unterschied, ob ich z.B. ein
Wasserzeichen mit 24 pt Größe in eine Datei mit 72 oder 600 dpi schreibe.

Wendelin Uez

unread,
Aug 23, 2023, 12:00:14 PM8/23/23
to
> Ich weiss, es ist schwer zu verstehen. Aber himetric ist eine Maßeinheit
> die VB durchaus umrechnen kann.

Ja, nur daß es nicht ums Umrechnen von Maßeinheiten geht.

Ulrich Möller

unread,
Aug 23, 2023, 4:35:54 PM8/23/23
to
Hallo Wendelin,

Am 23.08.2023 um 17:58 schrieb Wendelin Uez:
> Ohne die Auflösung kann ich zwar eine Bitmap auf jede beliebige Größe
> bringen, aber es macht schon einen Unterschied, ob ich z.B. ein
> Wasserzeichen mit 24 pt Größe in eine Datei mit 72 oder 600 dpi schreibe.

hier genau unterliegst du einem Verständnisproblem. Grafiken haben keine
"räumliche Dimension" oder auch Ausdehnung, sondern reduzieren sich
schlichtweg auf Pixel. Bei Grafiken von DPI zu reden, ist deshalb
sinnfrei. Erst wenn die Grafik irgendwo abgebildet wird, erhält sie eine
Räumlichkeit, wo dann festgelegt wird, mit wieviel Pixel pro
Längeneinheit etwas auf einem Medium dargestellt wird. Die Grafik selber
kennt diese "Räumlichkeit" nicht.

Vielleicht wird es für dich etwas einfacher, wenn du dir, z.B. in der
Forensik, das anschaust. Dort genau hast du das Problem der fehlenden
Räumlichkeit und deshalb muß immer eine bekannte Bezugsgröße mit
aufgenommen oder anderweitig aus dem Bildinhalt rekonstruiert werden.

Gruß Ulrich




Klaus Ketelaer

unread,
Aug 24, 2023, 4:01:19 AM8/24/23
to
Aha, und worum geht es dann?

Klaus Ketelaer

unread,
Aug 24, 2023, 4:05:32 AM8/24/23
to
Am 23.08.2023 um 17:58 schrieb Wendelin Uez:
>> Was ist denn in einer Std-Bitmap gespeichert? Hast Du da schon mal
>> Angaben zur Auflösung entdeckt? Ich nicht. Ich sehe da immer nur
>> farbige Pixel...
>
> Mir gab da grad einer einen Super-Tipp von wegen Google und so, du weiß
> schon, da habe ich ganz ungeniert nach BITMAP FORMAT gegoogelt und bin
> sofort darauf gestoßen:
> https://www.pohlig.de/Unterricht/Inf2004/Kap27/27.3_Das_bmp_Format.htm
Ein wirklich toller Tip. Vor 20 Jahren habe ich auch noch Header
geparst. Da baut man sich für jedes Format zig Funktionen, wobei
es spätestens beim JPEG richtig lustig wird. Da gibt es keine
festen Adressen mehr, sonder nur noch Pointer auf Strukturen.

>
> Die Auflösung steht bei BMPs im Header Byte 38-45.
Kann, muss aber nicht

> Da Headerauslesen relativ umständlich ist und außerdem bei jeder
> Dateiart anders hatte ich auf eine entsprechende Windows-Funktion gehofft.

Es gibt zig Windowsfunktionen dafür. Schau dir einfach mal

GdipCreateBitmapFromFile
GdipGetImageDimension
GetPixelFormat
GetImageRawFormat
GdipDisposeImage

Da kann man ggf. auch gleich die Exif-Properties mit auslesen.
an.

Ich habe einfach mal auf fertigen Code verzichtet, nur um dich mal
dazu zu nötigen, dich mit der Materie zu beschäftigen.

Wie ich bereits mehrfach erwähnt habe, kann man auch alle Datei-
Attribute, die der Explorer anzeigen kann, also auch Breite, Höhe,
Spieldauer, ... mit Shell-Befehlen auslesen. Die fangen alle mit SH
an...

Ich hole mir so alle Thumbnails zu Videos, Bildern und Dokumenten.
Das ist einfacher als alles selber zu erstellen.


Wendelin Uez

unread,
Aug 24, 2023, 8:18:24 AM8/24/23
to
...ich weiß es wirklich zu schätzen, wenn mir jemand versucht zu helfen.

Aber ihr solltet mir bitte, bitte nicht immer wieder erneut erklären, was
ich gar nicht gefragt habe, und manchmal bitte auch nicht so arrogant sein,
mir fehlenden Willen zu googeln zu unterstellen oder selbst Stichworte
liefern, zu denen Google im ersten Ansatz nix bis Unbrauchbares liefert. Und
wie man Tausendstel eines cm in Millimeter umrechnet war mir jetzt ehrlich
gesagt auch nicht gerade unbekannt.

Ich wollte ja nur wissen, ob ich die DPI-Werte auf einfache Weise und wenn's
geht, formatübergreifend, auslesen kann. Mein Eröffnungsposting kann doch
deutlicher und klarer nicht sein.

Da offensichtlich das niemand weiß lassen wir's also bitte einfach auf sich
beruhen und schließen die Diskussion.

Und trotzem, danke für die rege Beteiligung.

wuez


Ulrich Möller

unread,
Aug 24, 2023, 9:00:38 AM8/24/23
to
Hallo Wendelin,

Am 24.08.2023 um 14:06 schrieb Wendelin Uez:
> Ich wollte ja nur wissen, ob ich die DPI-Werte auf einfache Weise und
> wenn's geht, formatübergreifend, auslesen kann.

Und nochmal, Grafiken haben keinen DPI-Wert, nur Pixel!

> Da offensichtlich das
> niemand weiß

Du ignorierst einfach die Antworten, weil sie dir nicht in den Kram
passen. Das Unwissen geht dann wohl mehr von dir aus und anscheinend
möchtest du das auch nicht wahrhaben
Es ist nicht i.O., wenn du jetzt alle anderen dafür verantwortlich
machen möchtest.

Ulrich



Klaus Ketelaer

unread,
Aug 24, 2023, 9:57:54 AM8/24/23
to
Am 24.08.2023 um 14:06 schrieb Wendelin Uez:
>> Mein Eröffnungsposting
> kann doch deutlicher und klarer nicht sein.
>
Ich will mal auf dein OP eingehen:

| Gibt es eine Funktion, mit der man die dpi-Werte auslesen/ermitteln
| kann, idealerweise auch für andere von VB akzeptierte Bildformate wie
|z.B. JPG?

Ihr habe Dir mehrfach mitgeteilt, dass man diese Werte mit
Shell-Funktionen aus der Bild-Datei auslesen kann, sofern die angegeben
wurden.

Zuletzt habe ich dir die Api-Funktionen verraten, mit denen Du wirklich
alles auslesen kannst, sogar die Exif-Header in denen noch unzählige
andere Informationen liegen, wie z.B. die Kamera, die Blende, etc.

Eigentlich bin ich davon ausgegangen, dass Du dankbar das MSDN
kosultiert hättest, und dir dort die Beispiele angesehen hättest.
Auch wenn es "arraogant" klingt. Würdest Du Google und das MSDN
konsequent nutzen, würden sich dir ganz andere Welten erschließen.

Aber ich möchte wetten, dass Du das auch bei meinem Menü-Beispiel
nicht getan hast, weil es halt mühsam ist...


| Die ScaleX-/ScaleY-Methode enthält einen Skalenparameter vbHimetric,
| aber ich bin noch nicht dahintergekommen, ob er die gesuchte
| Umrechnung von Pixel auf Längeneinheit bietet und so den dpi-Wert zu
| berechnen erlaubt.

Hier fragst Du explizit nach "himteric" und auch das habe ich mehrfach
beantwortet. Und nun hat es nichts mit deiner Frage zu tun?

> Da offensichtlich das niemand weiß lassen wir's also bitte einfach auf
> sich beruhen und schließen die Diskussion.

Diese Anmerkung empfinde ich als ziemlich unverschämt, und sie sollte
eher "weil ich lernresistent bin" lauten

Ansonsten:
Bei normalen Bildern hat man eh schlechte Karten, weil normalerweise
nur Geräte wie Digitalkameras oder Scanner den DPI-Wert überhaupt
angeben. Wie Ulrich richtig angemerkt hat, ergeben die dpi bei Bildern
meist wenig Sinn. Spätestens wenn Du das Bild auf dem Monitor hast,
gibt es keine dpi mehr. Auf dem Monitor gibt es nur Bitmaps.

Erzeuge mit FotoFiltre ein Bild 800x600 mit 1200 dpi. Dann erzeuge ein
Bild 800x600 mit 75 dpi, und dann vergleiche die Dateien. Die sind
absolut identisch, bis auf die Header-Einträge für dpi. Da ist nichts
größer oder kleiner.

Wenn ich hingegen ein Dokument mit 1200 dpi scanne, dann bekomme ich
eine riesige Fototapete, und brauche die dpi um auf die Ursprungsgröße
zurück zu rechnen, damit ich die Grafik in der richtigen Größe abbilden
kann. Das macht aber kein Mensch, weil er dadurch nur Schrott
produziert.

Ich nutze den dpi Wert nur, um zu sehen, in welche Auflösung der Scan
am besten rüber kommt. Das mache ich bei der Kamera nicht anders. Wenn
das Bild dann im Kasten ist, dann interessieren mich dpi, iso, blende,
.... nicht mehr.

Wenn Du nicht mit Druckereien, Belichtern oder solchen Ausgabegeräten
zusammen arbeitest, dann können dir die dpi im Süden vorbei gehen.

Wenn Du deinem Nutzer irgendwelche schlauen DPI-Werte anzeigen willst,
dann rechne doch einfach die Größe des Bildes in Zoll um, und ermittelst
daraus die "Bildpunkte pro Zoll" dpi. Kleines Einmaleins.


Klaus Ketelaer

unread,
Aug 24, 2023, 11:04:42 AM8/24/23
to
Am 24.08.2023 um 14:06 schrieb Wendelin Uez:

[...]

Hier noch ein Beispiel, was ich bereits vor 20 Jahren
auf Bild-Dateien ausgelesen habe:

http://spambouncer.de/bilder/vb/

Von wegen nicht wissen...

Wendelin Uez

unread,
Aug 25, 2023, 10:08:22 AM8/25/23
to
> Und nochmal, Grafiken haben keinen DPI-Wert, nur Pixel!

Grafiken nicht, aber eben Grafik-Dateiformate, zumindest das BMP-Format.
Habe ich sogar verlinkt.

Was an der Frage "ob ich die DPI-Werte auf einfache Weise und wenn's geht,
formatübergreifend, auslesen kann" war da eigentlich so unklar?

So, jetzt ist aber wirklich over & end, ich bete das nicht dutzendmal vor.

Wolfgang Εnzinger

unread,
Aug 25, 2023, 5:33:01 PM8/25/23
to
Am Fri, 25 Aug 2023 16:07:59 +0200 schrieb Wendelin Uez:

>> Und nochmal, Grafiken haben keinen DPI-Wert, nur Pixel!
>
> Grafiken nicht, aber eben Grafik-Dateiformate, zumindest das BMP-Format.
> Habe ich sogar verlinkt.

Meinst du diesen Link hier?
https://www.pohlig.de/Unterricht/Inf2004/Kap27/27.3_Das_bmp_Format.htm

Da steht zwar was von DPI ("X-Auflösung (75 dpi)"), aber das ist Blödsinn.
Der beschriebene Wert bedeutet schlicht, wieviele Pixel das Bild horizontal
hat. Die 75 dpi sind aus den Fingern gesogen, da hätte der Autor genausogut
irgendeinen anderen Wert hinschreiben können. Im BMP-Format ist keinerlei
Dimension einer physischen Repräsentation hinterlegt, weder inbound noch
outbound.

Ulrich hat das ganz richtig erklärt; das solltest du dir nochmal zu Gemüte
führen.

--
Viele Grüsse,
Wolfgang
https://www.enzinger.net

Klaus Ketelaer

unread,
Aug 26, 2023, 5:53:55 AM8/26/23
to
Wenn Du statt hier rumzubocken einfach mal den Hilfen folgen
würdest, die man dir zukommen lässt, dann hättest Du die
Lösung in wenigen Minuten kodiert.

Aber bei deiner grenzenlosen Faulheit ist das sicherlich
zu viel verlangt. Ohne fertigen Code bist Du anscheinend
völlig aufgeschmissen.

Also, hier der fertige Code:

Public Function GetDPI(ByVal szFile As String, ByRef X As Single, ByRef
Y As Single) As Long
Dim hBitmap As Long
Dim lResult As Long

lResult = GdipCreateBitmapFromFile(StrPtr(szFile), hBitmap)
If lResult = 0 Then
lResult = GdipGetImageHorizontalResolution(hBitmap, X)
lResult = GdipGetImageVerticalResolution(hBitmap, Y)
End If
End Function

Ich hoffe Du findest die Funktions-Deklarationen alleine...

Und wenn Du, anstatt es nur zu behaupten, wirklich mal Googeln
würdest dann hättest Du sicherlich den Tip 0676 auf Active VB
entdeckt.

Aber Suchbegriffe wie "vb6 dpi auslesen" sind ja viel zu komplex,
als dass Du da darauf kommen würdest...


Wolfgang Εnzinger

unread,
Aug 26, 2023, 7:44:33 AM8/26/23
to
Jetzt habe ich doch nochmal nachgeschaut, und ich muss mich korrigieren: im
BMP-Header stehen tatsächlich nicht nur die Pixel-Dimensionen des Bildes
(Offset 12H und 16H), sondern auch Angaben zur physischen Größe (Offset 26H
und 2AH). Allerdings nicht in DPI, sondern in Pixel pro Meter, der Wert
muss also noch durch 39.37008 geteilt werden, um DPI zu erhalten.

Format-übergreifend ermittelt man diese Werte in der Tat am einfachsten mit
GDI+, so wie von Klaus heute um 11:53 beschrieben. Da bekommt man dann auch
gleich DPI geliefert.

Ulrich Möller

unread,
Aug 26, 2023, 8:32:51 AM8/26/23
to
Hallo Wolfgang,

du mußt dich nicht korrigieren, es gilt nach wie vor, daß Grafiken per
Definition keinen DPI Wert haben bzw. kennen. Entweder drücke ich mich
nicht richtig aus oder man möchte das nicht verstehen. Ein DPI Wert sagt
etwas über die Auflösung aus, eine Grafik hat aber nur ein Dimension in
Pixel, keine Auflösung, selbst wenn im Dateiformat ein DPI Feld
vorhanden sein sollte!
Angenommen ich habe ein Bild mit 200px Breite und ich benötige 400px
Breite ist es zu klein, unabhängig von der DPI.
DPI wird dann interessant, wenn ich die Grafik abbilden möchte, z.B. auf
Papier. Für das o.a. Bild mit 200px und einer gewünschten Druckbreite
von 13cm muß ich mit 39 DPI drucken (theoretisch). oder für eine Breite
von 0,3 cm mit 1693 DPI. Möchte man jetzt bei den üblichen 1200dpi eines
Druckers das Bild 5cm breit ausdrucken, muß ich die Grafik auf eine
andere Anzahl Pixel in der Breite transformieren. Es wird also nicht
eine DPI einer Grafik ermittel, berechnet oder was auch immer, sondern
die Pixelanzahl wird mit einem entsprechendem Algorithmus neu gerechnet.

In einer BMP Datei sagt die Zahl 72 DPI nichts anderes aus, als dass sie
nicht näher bestimmt ist. Was man machen könnte, wäre rein zur
Information die DPI Auflösung des Aufnahmegerätes o.a. zu hinterlegen,
was aber eigentlich keinen Nährwert hat, s.o. Erstellt man eine Grafik
per Software gibt es auch keine DPI Werte, sondern nur Pixel.

Hier nochmal zum nachlesen:
https://beesign.com/themen/dpi-fuer-dummies.php
Grüße Ulrich

Wolfgang Εnzinger

unread,
Aug 26, 2023, 11:00:11 AM8/26/23
to
Am Sat, 26 Aug 2023 14:32:47 +0200 schrieb Ulrich Möller:

> du mußt dich nicht korrigieren, es gilt nach wie vor, daß Grafiken per
> Definition keinen DPI Wert haben bzw. kennen.

Dachte ich ja auch zuerst.

Prinzipiell: klar, die Angabe, wieviele Pixel das Bild bzgl. Breite und
Höhe hat, ist die bei Weitem wichtigere. Ohne die wüsste man nicht, nach
wievielen Pixeln im Byte-Strom eine neue Zeile anfängt.

> Ein DPI Wert sagt
> etwas über die Auflösung aus, eine Grafik hat aber nur ein Dimension in
> Pixel, keine Auflösung, selbst wenn im Dateiformat ein DPI Feld
> vorhanden sein sollte!
> Angenommen ich habe ein Bild mit 200px Breite und ich benötige 400px
> Breite ist es zu klein, unabhängig von der DPI.
> DPI wird dann interessant, wenn ich die Grafik abbilden möchte, z.B. auf
> Papier. Für das o.a. Bild mit 200px und einer gewünschten Druckbreite
> von 13cm muß ich mit 39 DPI drucken (theoretisch). oder für eine Breite
> von 0,3 cm mit 1693 DPI. Möchte man jetzt bei den üblichen 1200dpi eines
> Druckers das Bild 5cm breit ausdrucken, muß ich die Grafik auf eine
> andere Anzahl Pixel in der Breite transformieren. Es wird also nicht
> eine DPI einer Grafik ermittel, berechnet oder was auch immer, sondern
> die Pixelanzahl wird mit einem entsprechendem Algorithmus neu gerechnet.

Das bezieht sich jetzt auf eine gewünschte Größe (Breite, Höhe) der
Ausgabe, der man alles andere unterordnet.

Wenn ich aber beispielsweise ein topographische Karte 1:25.000 einscanne
und den Scan an jedemanden maile, dann weiß der: aha, 1 cm in der Karte =
250 m in der Realität. Damit er aber nach dieser Regel in der Karte messen
kann, muss er wissen, mit welcher Auflösung ich das gescannt habe, und sein
Ausgabegerät, sei es Bildschirm oder Drucker, entsprechend einstellen.

Sicher ist das kein sehr häufiger Anwendungsfall, aber dafür gibt's dann
wohl entsprechende Einträge im Header.

Aber denk dir nix, diese Frage ist generell ein kontroverses Thema. Ich
erinnere mich an meine Zeit an der Uni, lange her, da war mal ein Lehrstuhl
für Photogrammetrie und Fernerkundung neu zu besetzen. Die Kandidaten kamen
also der Reihe nach anmarschiert und hielten ihre öffentlichen Vorträge,
die anschließend diskutiert wurden. Der bisherige Lehrstuhlinhaber wollte
einen bestimmten Kandidaten auf keinen Fall als seinen Nachfolger sehen und
traktierte ihn daher in der Diskussion mit allerlei Fangfragen, u.a. mit
der, welchen Maßstab ein von ihm gezeigtes Satellitenbild habe. Die aus
seiner Sicht richtige Antwort wäre gewesen: keinen. Darüber war sich die
versammelte Fachwelt dann aber alles andere als einig ... ;-)

Ulrich Möller

unread,
Aug 27, 2023, 4:39:59 AM8/27/23
to
Hallo Wolfgang,

Am 26.08.2023 um 17:00 schrieb Wolfgang Εnzinger:
> Wenn ich aber beispielsweise ein topographische Karte 1:25.000 einscanne
> und den Scan an jedemanden maile, dann weiß der: aha, 1 cm in der Karte =
> 250 m in der Realität. Damit er aber nach dieser Regel in der Karte messen
> kann, muss er wissen, mit welcher Auflösung ich das gescannt habe, und sein
> Ausgabegerät, sei es Bildschirm oder Drucker, entsprechend einstellen.

genau das ist ein schönes Beispiel. Der eingescannte DPI Wert spielt
hier eigentlich keine Rolle, der Maßstab ist 1:25.000 und wie ich vorher
schon mal geschrieben habe, gibt man zur maßstabsgetreuen Wiedergabe
eine Legende an. Wenn ich dabei für die Ausgabe den gleichen DPI Wert
verwende wie beim einlesen, habe ich einen 1:1 Kopie erstellt und die
Legende als Referenz ist gleich groß. Im anderen Fall kann nur mittels
der Legende direkt abgemessen werden, wieviel cm auf Karte 250 m
entsprechen. Man könnte die Karte auch doppelt so groß ausdrucken, am
Maßstab ändert sich dabei aber nichts, dann sind es dann halt 2 cm pro
250 m.

Gut, im allgemeinen Sprachgebrauch nimmt man üblicherweise bei einem
Maßstab von 1:25.000 an, daß 1 cm in der Karte 250m entsprechen, muß
aber nicht sein! Man kann die Karte auch mit einem anderen
Skalierungsfaktor ausdrucken.

Gruß Ulrich




Klaus Ketelaer

unread,
Aug 27, 2023, 6:32:20 AM8/27/23
to
Am 27.08.2023 um 10:39 schrieb Ulrich Möller:

[...]

Interessant zu wissen ist auch Folgendes:

Ich habe ein Testbild mit 1600 x 1200 Pixel und 150 dpi

Wenn ich das Bild mit GdipDrawImage(hImage, hBitmap, 0, 0)
ausgebe, dann wird das Bild auf 1024 x 768 skaliert, was
96dpi entspricht.

Nur wenn ich das Bild mit einer Größen-Angabe ausgebe
GdipDrawImageRect(hImage, hBitmap, 0, 0, 1600, 1200)
erscheint es in der "richtigen" Größe.

Also sollte man die dpi immer im Auge behalten. Zumindest
wenn man mit der Api arbeitet. Ganz so unwichtig sind sie
anscheinend doch nicht.

Gruß Klaus

Wolfgang Εnzinger

unread,
Aug 27, 2023, 7:29:13 AM8/27/23
to
Am Sun, 27 Aug 2023 10:39:56 +0200 schrieb Ulrich Möller:

> Gut, im allgemeinen Sprachgebrauch nimmt man üblicherweise bei einem
> Maßstab von 1:25.000 an, daß 1 cm in der Karte 250m entsprechen, muß
> aber nicht sein!

Doch, muss. Denn genau das ist die Definition eines Maßstabs.

> Man kann die Karte auch mit einem anderen Skalierungsfaktor ausdrucken.

Kann man. Allerdings hat die Karte dann eben nicht mehr den Maßstab
1:25.000. Nur der Grad der Generalisierung ist dann noch der einer TK25.

Schau mal hier:
https://de.wikipedia.org/wiki/Ma%C3%9Fstabsleiste#/media/Datei:Ma%C3%9Fstabsleiste.png

Die Maßstabsleiste bleibt gültig, egal mit welcher Skalierung die Ausgabe
erfolgt; der numerische Maßstab und die Umrechnungshilfe hingegen stimmen
nur bei passender Skalierung.

--
Viele Grüße,
Wolfgang
https://www.enzinger.net
0 new messages