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

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