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 :allright:
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 :allright: :allright: :allright:

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