Image

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
steini
Beiträge: 7
Registriert: 02.02.2006 13:57

Image

Beitrag von steini »

Ich hab das Problem, dass UseImage entfernt wurde aber es fehlt
mir eine Funktion die mir die ImageNummer liefert
wie zum Beispiel GetActiveWindow()

LoadImage(#PB_Any, FileName$)
und dann kann ich die Größe nicht mehr ermitteln

Oder hab ich was verpasst? Wie kann ich den Code umschreiben

Code: Alles auswählen

For i = 0 To nr-i

    im(i)\id=LoadImage(#PB_Any,pngfilelist(i))

    win = ???????????

    im(i)\y = high
    im(i)\h = ImageHeight(win)
    im(i)\w = ImageWidth(win)
    high = high + im(i)\h
    If Width < im(i)\w
      width =    im(i)\w
    EndIf
  Next

Alle Funktionen benötigen ja jetzt die Image Nummer

removed : UseImage() - change UseImage(#Image) to

ImageID(#Image) where just the ID is needed.

added : CreateImage(#Image, Width, Height [, Depth]) - New Parameter
added : LoadImage(#Image, FileName$ [, Flags]) - New Parameter
added : CatchImage(#Image, FileName$ [, Length [, Flags]]) - New Parameters

changed : ImageDepth(#Image) - new parameter
changed : ImageHeight(#Image) - new parameter
changed : ImageWidth(#Image) - new parameter
changed : ImageID(#Image) - new parameter
changed : ImageOutput(#Image) - new parameter
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Die Nummer vergibst Du doch selbst - also kannst Du das genauso wie z.B. auch bei Sprites machen.

Wenn Du das Image loadest mit #PB_Any, dann ist der Rückgabewert der LoadImage()-Funktion automatisch die Image-Number...
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Wenn du #pb_any nutzt kannst du auch gleich die Struktur benutzen

Code: Alles auswählen

  Structure PB_Image
  	Bitmap.l     
  	Width.w      
  	Height.w
  	Depth.w
  	ColorArray.l 
  EndStructure
  
  *img.PB_Image = LoadImage(#PB_Any,"gfx/cursor-mouse.bmp")
  
  Debug *img        ; PBID      
  Debug *img\Bitmap ; OSID      -> ImageID(*img)
  Debug *img\Width  ; breite    -> ImageWidth(*img)
  Debug *img\Height ; laenge    -> ImageHeight(*img)
  Debug *img\Depth  ; farbtiefe -> ImageDepth(*img)
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Es steht doch alles da:
change UseImage(#Image) to ImageID(#Image) where just the ID is needed
Aber dein Beispiel is ja noch simpler:

Code: Alles auswählen

For i = 0 To nr-i 

    im(i)\id=LoadImage(#PB_Any,pngfilelist(i)) 

    im(i)\y = high 
    im(i)\h = ImageHeight(im(i)\id) 
    im(i)\w = ImageWidth(im(i)\id) 
    high = high + im(i)\h 
    If Width < im(i)\w 
      width =    im(i)\w 
    EndIf 
  Next
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Wenn du #pb_any nutzt kannst du auch gleich die Struktur benutzen

Fett, das kannte ich gar nicht :shock:

Funktioniert das auch mit Sprites und sowas? Und wo steht sowas?!
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ZeHa hat geschrieben:Wenn du #pb_any nutzt kannst du auch gleich die Struktur benutzen

Fett, das kannte ich gar nicht :shock:

Funktioniert das auch mit Sprites und sowas? Und wo steht sowas?!
Ja , "Library SDK/PureBasic library descriptor.txt"
Benutzeravatar
steini
Beiträge: 7
Registriert: 02.02.2006 13:57

Beitrag von steini »

ZeHa: Selbst die Nummer vergeben. ja das kann ich, aber das ganze soll vom programm gesteuert werden, sonst muss ich mir ja alles irgenwo merken.

HeXOR so wie du es vorgeschlagen hast, hab ich das schon auch probiert.

Das Problem ist , dass dann zwar ein Fenster aufgeht, mit der richtigen Größe, aber kein Image zu sehen ist.

die Ganze

Code: Alles auswählen


  UsePNGImageDecoder()
  Structure im_structure
    id.l
    y.l
    h.l
    w.l
  EndStructure
  high =  0
  width = 0
  Dim im.im_structure(2); mal zm Beispiel
  nr=2


  For i = 0 To nr-i

    im(i)\id=LoadImage(#PB_Any,pngfilelist(i))
    ;win = GetActiveImage()
    im(i)\y = high
    im(i)\h = ImageHeight(im(i)\id);  und hier bleibt der debugger stehen 
    im(i)\w = ImageWidth(im(i)\id);   #Image nicht initialisert
    high = high + im(i)\h
    If Width < im(i)\w
      width =    im(i)\w
    EndIf

  Next
  

 winid = OpenWindow(#PB_Any,0,0, width , high ,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"APJ Plot") 
 
 If winid And CreateGadgetList(WindowID(winid))
 
 
   For i = 0 To nr-i
    ImageGadget(#PB_Any, 0, im(i)\y, im(i)\w ,im(i)\h, im(i)\id ) ; und hier kann natürlich auch der Bug begraben sein
   Next
   
   ;Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
   ;CloseWindow(winid)
 EndIf
wenn ich es jetzt so schreib gehts weil ich die imagenummer hab

Code: Alles auswählen

For i = 0 To nr-i

    im(i)\id=LoadImage(i,pngfilelist(i))
    ;win = GetActiveImage()
    im(i)\y = high
    im(i)\h = ImageHeight(i)
    im(i)\w = ImageWidth(i)
    high = high + im(i)\h
    If Width < im(i)\w
      width =    im(i)\w
    EndIf

  Next

Mach ich folgendes

Code: Alles auswählen

    im(i)\id=LoadImage(i,pngfilelist(i))
    MessageRequester("",Str(im(i)\id))
wird -2337374 ausgegeben

LoadImage gibt also nicht die Image Nummer zurück, die ich für die weiteren Funktionen benötige.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

steini hat geschrieben: Mach ich folgendes

Code: Alles auswählen

    im(i)\id=LoadImage(i,pngfilelist(i))
    MessageRequester("",Str(im(i)\id))
wird -2337374 ausgegeben

LoadImage gibt also nicht die Image Nummer zurück, die ich für die weiteren Funktionen benötige.
Ähm, ja klar, die "Nummer" gibt es ja auch nur zurück, wenn du #PB_Any benutzt, wenn du, wie in deinem Beispiel i benutzt, bekommst du die ImageID zurück.
Benutzeravatar
steini
Beiträge: 7
Registriert: 02.02.2006 13:57

Beitrag von steini »

Hab das natürlcih auch mit #PB_Any getestet
da kommt dann 9641704 usw.

Das window wird geöffnet, aber die ImageGadget nicht angezeigt.
mit i anstatt #PB_Any gehts.

Jetz mal schnell ein anderer Test.

Es GEHT :allright: :allright:

Code: Alles auswählen

  For i = 0 To nr-i
    ImageGadget(#PB_Any, 0, im(i)\y, im(i)\w ,im(i)\h, ImageID(im(i)\id) ) 
   Next
ImageID(#Image) hatt ich falsch verstanden

Dass eimal die ID und das anderemal die ImageNummer zurückgegeben wird war mir so nicht klar

Aber jetzt

DANE :praise: :praise:
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Gut :allright:
Eben wollt ich dasselbe posten, hatte jetzt nämlich mehr Zeit, mir dein Beispiel genauer anzuschauen.

Hier nur noch als Beweis:

Code: Alles auswählen

UsePNGImageDecoder()

Structure im_structure
	id.l
	y.l
	h.l
	w.l
EndStructure

high =  0
width = 0

Dim im.im_structure(2); mal zm Beispiel
nr=2

Dim pngfilelist.s(2)
pngfilelist(0) = "H:\button.png"
pngfilelist(1) = "H:\logo.png"
	

For i = 0 To nr-i

	im(i)\id = LoadImage(#PB_Any, pngfilelist(i))

	im(i)\y = high
	im(i)\h = ImageHeight(im(i)\id)
	im(i)\w = ImageWidth(im(i)\id)
	high + im(i)\h
	If width < im(i)\w
		width = im(i)\w
	EndIf

Next
 

winid = OpenWindow(#PB_Any,0,0, width , high ,#PB_Window_SystemMenu|#PB_Window_ScreenCentered, "APJ Plot")
 
If winid And CreateGadgetList(WindowID(winid))
 
	For i = 0 To nr-i
		ImageGadget(#PB_Any, 0, im(i)\y, im(i)\w ,im(i)\h, ImageID(im(i)\id) ) ; und hier kann natürlich auch der Bug begraben sein
	Next
   
	Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
	CloseWindow(winid)
EndIf
Gesperrt