Hi,
kann mir bitte wer sagen, wie ich per API die Breite und Höhe eines Images ermitteln kann. Hintergrund warum ich das brauche ist folgender:
Bei einem vorhandenen ButtonImageGadget kann ich mit GetGadgetAttribute das OS Handle des Images ermitteln. So weit ich weiß, gibt es ja noch immer keinen Weg um vom OS Handle zur #Image zu kommen.
API das ImageWidth(#Image) entspricht
Re: API das ImageWidth(#Image) entspricht
Ohne Api:
Grüße ... Kiffi
Code: Alles auswählen
myImage = GetGadgetAttribute(#myButtonImageGadget, #PB_Button_Image)
ImageGadget(#myImageGadget,0,0,0,0,myImage)
HideGadget(#myImageGadget, #True)
Debug GadgetWidth(#myImageGadget)
Debug GadgetHeight(#myImageGadget)
a²+b²=mc²
Re: API das ImageWidth(#Image) entspricht
Danke Kiffi, hab es inzwischen selber gefunden. Es geht mit GetObject_. Da ich es nur Windows only brauche, scheint mir das die einfachere Lösung als den Umweg über ein extra Gadget.
Generell muss ich sagen, dass ich das extrem schwach von Purebasic finde, dass es keine Umkehrbefehle für ImageId, GadgetId etc. gibt, zumal ich mir nicht vorstellen kann, dass eine Implementierung ein riesen Aufwand wäre.
Generell muss ich sagen, dass ich das extrem schwach von Purebasic finde, dass es keine Umkehrbefehle für ImageId, GadgetId etc. gibt, zumal ich mir nicht vorstellen kann, dass eine Implementierung ein riesen Aufwand wäre.
Re: API das ImageWidth(#Image) entspricht
Wenn der Compiler sie nicht in der Objektliste hat, wie soll er die dann kennen ?Josh hat geschrieben:Generell muss ich sagen, dass ich das extrem schwach von Purebasic finde, dass es keine Umkehrbefehle für ImageId, GadgetId etc. gibt, zumal ich mir nicht vorstellen kann, dass eine Implementierung ein riesen Aufwand wäre.
Wenn man das Image mit PB erstellt oder eingelesen hat, ist das kein Problem... dazu hat Danilo im Forum was gepostet (frag mich jetzt nich wo...)
GadgetID,WindowID,ToolbarID und StatusbarID lassen sich auch wieder in die ObjectNummern zurückverfrachten, WENN sie denn mit PB erstellt
wurden. (Code ist in RSBasic's WinAPI_Library zu finden)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: API das ImageWidth(#Image) entspricht
Du meinst wahrscheinlich diesen Beitrag. Dazu habe ich folgende Fragen:Bisonte hat geschrieben:Wenn man das Image mit PB erstellt oder eingelesen hat, ist das kein Problem... dazu hat Danilo im Forum was gepostet (frag mich jetzt nich wo...)
1) Import ""
Was wird da mit "" importiert?
2) ASM Code
Da ich ungern etwas verwende das ich nicht verstehe und keinen blassen Dunst von ASM habe, habe ich da ein wenig weiter gesucht und habe mir folgende Variante von Danilo's Code zusammengebastelt. Funktioniert ohne Probleme, aber vielleicht sieht jemand einen Fehler, den ich nicht bedacht habe.
Code: Alles auswählen
Import ""
PB_Image_Objects
PB_Object_EnumerateAll(*object,*callback,*d)
PB_Object_EnumerateStart(*object)
PB_Object_EnumerateNext(*object,*id.Integer)
PB_Object_EnumerateAbort(*object)
PB_Object_Count(*object)
EndImport
Procedure ImageFromImageID(ImageID)
Protected id, result = -1
PB_Object_EnumerateStart(PB_Image_Objects)
While PB_Object_EnumerateNext(PB_Image_Objects,@id)
If ImageID = ImageID(id)
result = id
PB_Object_EnumerateAbort(PB_Image_Objects)
Break
EndIf
Wend
ProcedureReturn result
EndProcedure
CreateImage(1,200,300)
CreateImage(2,100,150)
img = CreateImage(#PB_Any,123,456)
Debug ImageFromImageID( ImageID(1) )
Debug ImageFromImageID( ImageID(2) )
Debug ImageFromImageID( ImageID(img) )
Debug ImageFromImageID( 12 ) ; wrong, not PB ImageID
Josh
Zuletzt geändert von Josh am 08.11.2012 22:37, insgesamt 1-mal geändert.
Re: API das ImageWidth(#Image) entspricht
Zu 1):
Sieht ganz so aus, als ob da PureBasic-Funktionen importiert werden, auf welche man so normaler Weise keinen Zugriff hat. Man könnte auch Funktionen importieren, auf welche man eh schon Zugriff hat, allerdings habe ich absolut keine Ahnung wie die genau "dekoriert" werden, außer dass sie ganz typisch mit "PB_" beginnen.
Sieht ganz so aus, als ob da PureBasic-Funktionen importiert werden, auf welche man so normaler Weise keinen Zugriff hat. Man könnte auch Funktionen importieren, auf welche man eh schon Zugriff hat, allerdings habe ich absolut keine Ahnung wie die genau "dekoriert" werden, außer dass sie ganz typisch mit "PB_" beginnen.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Re: API das ImageWidth(#Image) entspricht
Soweit wie ich das verstanden habe, wird mit Import "" diejenigen Static Libs importiert, die die entsprechenden Funktionen enthalten (zumindest wenn sie PB-Static Libs sind wie Gadget.lib oder Window.lib)
Und bei deinem Beispiel lehn ich mich mal aus dem Fenster und sag : Sieht gut aus....
Und bei deinem Beispiel lehn ich mich mal aus dem Fenster und sag : Sieht gut aus....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom