vom der ImageID zurück zur ImageNR ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

vom der ImageID zurück zur ImageNR ?

Beitrag 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
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: vom der ImageID zurück zur ImageNR ?

Beitrag von NicTheQuick »

Das geht nicht, weil die ImageID ein betriebssystem-spezifisches Handle ist und nicht mehr von Purebasic verwaltet wird.
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: vom der ImageID zurück zur ImageNR ?

Beitrag von silbersurfer »

jo danke Nic für die schnelle Antwort :allright:
aber trotzdem schade das es nicht geht
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: vom der ImageID zurück zur ImageNR ?

Beitrag von Danilo »

Habe dafür mal eine Prozedur gemacht, nennt sich ImageFromImageID() (vereinfachte Version von Josh).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: vom der ImageID zurück zur ImageNR ?

Beitrag 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
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: vom der ImageID zurück zur ImageNR ?

Beitrag 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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: vom der ImageID zurück zur ImageNR ?

Beitrag 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
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Antworten