Seite 1 von 1
BUG: CopyImage mit #PB_Any
Verfasst: 15.12.2004 20:18
von ParkL
Hi !
Ein kleiner Bug Report:
Code: Alles auswählen
im1 = CreateImage(#PB_Any, 1,1)
im2 = CreateImage(#PB_Any, 1, 1)
CopyImage(im2, im1)
Wenn man mit pb_any bilder erzeugt, bekommen sie sehr hohe id's.
Beim Copy Image Befehl tritt dann ein Fehler auf, weil er meint, die ID sei zu hoch.
Ist jetzt nix weltbewegendes, aber immer noch ein bug.
Park
Verfasst: 15.12.2004 20:30
von tranquil
Ich bin mal so frei und schreibe dein posting ins englische forum da fred hier nicht reinsieht.
Verfasst: 15.12.2004 21:03
von MVXA
das ist schon etwas länger bekannt. SirCus hat, behaupte ich jetz mal, davon berichtet. Mann muss da wohl mit festen konstanten arbeiten, sofern möglich.
Verfasst: 15.12.2004 21:34
von PMV
Das selbe problem tritt auch bei CopySprite() auf.
Du versuchst ja ein neues Image anhand eines vorhanden zu erstellen, es zu kopieren. Hierbei willste lediglich, dass das vorhandene Image automatisch frei gegeben wird.
Das der Debugger reagiert find ich ganz normal, könnt die Variable auch von hand so hoch gesetzt worden sein (ausversehen).
Wenn du das so machen willst, dann sollteste das eventuell so machen
Code: Alles auswählen
im1 = CreateImage(#PB_Any, 1, 1)
im2 = CreateImage(#PB_Any, 1, 1)
FreeImage(im2)
im2 = CopyImage(im1, #PB_Any)
^^selbst wenns nen Bug wäre, so umgehste denn spielend und von daher ist der nicht sehr "wichtig"
MFG PMV
Verfasst: 15.12.2004 23:20
von tranquil
also diese überprüfung vom debugger "value or ID too high" find ich ja mal total hirnrissig. es liegt doch an dem programmierer IDs zu vergeben. und solange in den docs nicht definitiv festgelegt wird:
ID = Word gehe ich immer davon aus das es nen Long ist. Auf ein Warning könnte ich grad noch so einigen, aber alles andere... naja.
und so "drum herum" coding ist doch auch was für den allerwertesten. ich programmiere basic weil ich ein programm gut lesen möchte und schnell zum ziel will. sowas zerstört die orientierung im code unnötig!
Mike
Verfasst: 16.12.2004 15:10
von ParkL
PMV hat geschrieben:
Code: Alles auswählen
im1 = CreateImage(#PB_Any, 1, 1)
im2 = CreateImage(#PB_Any, 1, 1)
FreeImage(im2)
im2 = CopyImage(im1, #PB_Any)
MFG PMV
Ok, du hast recht, das kann man so machen.
Ich finde es allerdings unlogisch, daß Sachen die mit PB-Image-Konstanten normal funktionieren, nicht auch für dynamisch erzeugte PB-Image-ID's geht. Wenn man mit 2 "normalen" #IMAGE Id's arbeitet ist der freeimage befehl ja schon Teil des CopyImage Befehls. PB macht intern wahrscheinlich genau das, was Du da oben hingeschrieben hast.
Es geht dabei mehr "ums Prinzip", ich finde es einfach nervig, daß man ständig irgendwelche Workarounds programmieren muß, weil die Befehle nicht wie dokumentiert funktionieren.
P
Verfasst: 16.12.2004 20:14
von PMV
Zu dem, was LittleFurz angesprochen hat ... ich hab dannach mal gesucht und ich glaub den richtigen Thread dazu gefunden zu haben, zumindest wurde dort auch über #PB_Any diskutiert
Link:
#PB_Any : Gadget object number is very high (over 10000)....
in dem Thread hat Freak in einem seinter Posts follgendes erwähnt:
Das ist eindeutig die falsche Art! Die Daten für die selbst vergebenen Objektnummern
werden praktisch in einem internen Array gespeichert. Wenn du also einfach
ständig die Nummer erhöhst, wächst das Array dauernd an. Desshalb soll man
da nicht so hohe Nummern verwenden und darauf macht der Debugger hier
aufmerksam.
^^das erklärt, warum Fred diese Sperre eingebaut hat. Obs nun trotzdem besser wäre, das ganze so zu machen, das es trotzdem weiter läuft mit Debugger, darüber lässt sich streiten
MFG PMV
Re: BUG: CopyImage mit #PB_Any
Verfasst: 17.12.2004 08:00
von Danilo
ParkL hat geschrieben:Ein kleiner Bug Report:
Code: Alles auswählen
im1 = CreateImage(#PB_Any, 1,1)
im2 = CreateImage(#PB_Any, 1, 1)
CopyImage(im2, im1)
Wenn man mit pb_any bilder erzeugt, bekommen sie sehr hohe id's.
Beim Copy Image Befehl tritt dann ein Fehler auf, weil er meint, die ID sei zu hoch.
Ist jetzt nix weltbewegendes, aber immer noch ein bug.
Der Code ist doch eh falsch.
Der richtige Code wäre:
Code: Alles auswählen
im1 = CreateImage(#PB_Any, 1,1)
im2 = CopyImage(im1, #PB_Any)
CopyImage kopiert *nicht* von Bild zu Bild, sondern erstellt
ein neues Bild von dem Vorhandenen!
Ich kann da keinen Bug erkennen. Der 2. Parameter ist die
Nummer des neuen Bildes oder #PB_Any - aber kein vorhandenes Bild.
Verfasst: 17.12.2004 13:22
von ParkL
naja ... PB sollte in seinem internen array erkennen, daß dieses Handle schon belegt ist, es FreeEn und beim Betriebssystem ein neues Bild beantragen, dessen handle dann wieder unter diesem Handle abgelegt wird.
So funktioniert's ja auch mit Konstanten-Images.
So hab ich das zumindest verstanden.
Ist ja auch egal ... So wichtig isses nun wirklich auch nicht...
Von mir aus können wir den Thread jetzt auch schließen !
Verfasst: 18.12.2004 20:08
von Andre
Werde Danilo's Hinweise mal noch genauer in die Hilfe aufnehmen.
