Seite 1 von 3

Image

Verfasst: 08.02.2006 13:59
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

Verfasst: 08.02.2006 14:12
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...

Verfasst: 08.02.2006 14:18
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)

Verfasst: 08.02.2006 14:26
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

Verfasst: 08.02.2006 15:49
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?!

Verfasst: 08.02.2006 15:57
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"

Verfasst: 08.02.2006 16:13
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.

Verfasst: 08.02.2006 16:37
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.

Verfasst: 08.02.2006 17:33
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:

Verfasst: 08.02.2006 17:37
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