Bildgröße über Imagehandle

Für allgemeine Fragen zur Programmierung mit PureBasic.
IB-Software
Beiträge: 57
Registriert: 29.08.2004 11:05
Computerausstattung: Windows 11
Wohnort: Berlin
Kontaktdaten:

Bildgröße über Imagehandle

Beitrag von IB-Software »

Hallo,

ich habe über API-Funktionen nur ein Handle eines Bildes (Icon). Ich benötige nun die Größe des Bildes.
ImageWidth und ImageHeight helfen mir nicht weiter, da ich dafür die #Image-Nr benötige, welche es aber nicht gibt. Ich habe nur das Handle.

Ich suche also eine Funktion um die Bildgröße zu bestimmen, wenn nur das Handle bekannt ist.
Ziel ist es, das Bild in ein PureBasic-Image (CreateImage => DrawImage) zu übertragen.

Danke im Voraus.
PureBasic 5.73/6.04 Beta 2; Windows 11 Pro 64
Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 3.19 GHz 16GB; NVIDIA GeForce RTX 3060 16GB
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Bildgröße über Imagehandle

Beitrag von Sicro »

Welche API-Funktion liefert dir das Handle?

Da du Icon erwähnst, hilft dir dieser Code vielleicht. Dort wird ein Icon aus einer EXE-Datei ausgelesen. Dabei ermittle ich auch in einem Fall die Icon-Größenangaben, siehe Zeile 336.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
IB-Software
Beiträge: 57
Registriert: 29.08.2004 11:05
Computerausstattung: Windows 11
Wohnort: Berlin
Kontaktdaten:

Re: Bildgröße über Imagehandle

Beitrag von IB-Software »

Ich nutze zum lesen des Handles SHGetFileInfo und habe mir den von Dir verlinkten Code angeschaut; würde ja eigentlich passen.

Nur leider ergibt GetIconSize nicht die Größe vom gelesenen Iconhandle. Habe das mit PureBasic.exe ausprobiert.
Da ergibt GetIconSize immer die nächstgrößere Kategorie wenn die Größe des IconHandles mit dem angeforderten nicht übereinstimmt. Auch wenn es das größere Icon nicht gibt.

Also bei:
GetIcon("f:\Programme\PureBasic\PureBasic.exe", 240) => RealIconWidth: 256
GetIcon("f:\Programme\PureBasic\PureBasic.exe", 64) => RealIconWidth: 256
GetIcon("f:\Programme\PureBasic\PureBasic.exe", 48) => RealIconWidth: 48; hier stimmt es, weil das Icon vorkommt
GetIcon("f:\Programme\PureBasic\PureBasic.exe", 40) => RealIconWidth: 48
PureBasic 5.73/6.04 Beta 2; Windows 11 Pro 64
Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 3.19 GHz 16GB; NVIDIA GeForce RTX 3060 16GB
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Bildgröße über Imagehandle

Beitrag von Shardik »

Helfen Dir vielleicht die beiden Beispiele von Danilo oder Josh aus dem englischen Forum weiter, die aus einem Image-Handle die PureBasic Image-ID ermitteln, die Du dann zur Größen-Ermittlung einsetzen kannst?

Oder die Prozedur Icon2Image von Sibru, die ein Icon-Handle z.B. von LoadIcon_() in eine PureBasic Image-ID umwandelt?
IB-Software
Beiträge: 57
Registriert: 29.08.2004 11:05
Computerausstattung: Windows 11
Wohnort: Berlin
Kontaktdaten:

Re: Bildgröße über Imagehandle

Beitrag von IB-Software »

@Shardik

Danke. Dein letzter Link hat mir weitergeholfen.

Mit
Define IconInfo.ICONINFO
Define StandardIcon ; ImageHandle

GetIconInfo_(StandardIcon, @IconInfo)
x = IconInfo\xHotspot * 2
y = IconInfo\yHotspot * 2
kann ich nun die Größe bestimmen.

Schönes Wochenende
PureBasic 5.73/6.04 Beta 2; Windows 11 Pro 64
Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 3.19 GHz 16GB; NVIDIA GeForce RTX 3060 16GB
Antworten