Seite 1 von 1
vom der ImageID zurück zur ImageNR ?
Verfasst: 06.03.2015 18:15
von silbersurfer
Hallo Leute, ich habe Mal eine kleine Frage bezüglich der ImageID.
Nun gibt es das Image an sich, und dann noch die daraus resultierende ImageID
Code: Alles auswählen
ImageGadget(#My_imageGadget,10,10,1560,880,ImageiD(#meinImage))
soweit so gut. Wie komme Ich von der ImageId, wieder zu meinen Image??
was damit meine ist in etwa so.
Code: Alles auswählen
ImageGadget(#Mein_Gadget,0,0,320,200,ImageID(MeinBild)
;hier bekomme Ich die ImageId von meine Gadget zurück
ImageID=GetGadgetState(#MeinGadget)
;und nun würde Ich gerne auf diesen Image zugreifen zb so
;aber dafür brauch ich die ImageNummer nicht das handle
If StartDrawing(ImageOutput(ImageNummer))
StopDrawing()
EndIf
Ich hoffe das war so weit verständlich
Re: vom der ImageID zurück zur ImageNR ?
Verfasst: 06.03.2015 18:35
von NicTheQuick
Das geht nicht, weil die ImageID ein betriebssystem-spezifisches Handle ist und nicht mehr von Purebasic verwaltet wird.
Re: vom der ImageID zurück zur ImageNR ?
Verfasst: 06.03.2015 18:52
von silbersurfer
jo danke Nic für die schnelle Antwort
aber trotzdem schade das es nicht geht
Re: vom der ImageID zurück zur ImageNR ?
Verfasst: 06.03.2015 20:23
von Danilo
Habe dafür mal eine Prozedur gemacht, nennt sich
ImageFromImageID() (vereinfachte Version von Josh).
Re: vom der ImageID zurück zur ImageNR ?
Verfasst: 06.03.2015 22:42
von silbersurfer
das ist ja mal cool Danke
Danilo werde Ich gleich mal testen
Edit: jo klappt gut, aber leider nicht von dem ImageGadget direkt *seuftz
Re: vom der ImageID zurück zur ImageNR ?
Verfasst: 07.03.2015 07:26
von Danilo
silbersurfer hat geschrieben:Edit: jo klappt gut, aber leider nicht von dem ImageGadget direkt *seuftz
Wie meinst Du das? So in etwa sollte das funktionieren:
Code: Alles auswählen
MyImageID = GetGadgetState(#MyImgGadget)
MyImage = ImageFromImageID(MyImageID)
If MyImage <> -1
SaveImage(MyImage, MyPath, #PB_ImagePlugin_PNG, 10, 24)
EndIf
Re: vom der ImageID zurück zur ImageNR ?
Verfasst: 07.03.2015 20:45
von silbersurfer
Das stimmt, so klappt das ja auch Danilo. Aber nur weil das Image noch bei Purebasic selbst verfügbar(Initialisiert) ist.
Nicht aber, wenn mein Image nach der übergabe an das ImageGadget freigegeben wurde oder verändert zb ResizeImage
das Imagegadget hat aber ein eigenes Image angelegt, sonst würde ja keine Id zurückkommen nach der Freigabe
Code: Alles auswählen
EnableExplicit
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
Enumeration
#My_Window
#My_ImageGadget
#My_Image=10
EndEnumeration
Define Event,Quit,TestImageID
CreateImage(#My_Image,200,300,32)
If OpenWindow(#My_Window, 0, 0, 855, 600, "Test Window Event ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If ImageGadget(#My_ImageGadget,0,0,855,600,ImageID(#My_Image))
FreeImage(#My_Image)
CreateImage(#My_Image,400,300,32)
TestImageID=GetGadgetState(#My_ImageGadget)
Debug TestImageID
Debug ImageFromImageID(TestImageID)
EndIf
EndIf
Repeat
Event=WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
Quit=#True
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
Until Quit=#True