 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 30.06.2013, 21:58 Titel: grafikpuffer |
|
|
kann man den namen eines grafikpuffers an eine sub übergeben?
ich hab eine Sub in der eine grafik gezeichnet wird doch das imagecreate steht im hauptmodul. Auch soll wenn kein puffer an die sub übergeben wird, direkt auf den bildschirm gezeichnet werden. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 30.06.2013, 22:06 Titel: |
|
|
Wieso willst du den Namen des Grafikpuffers übergeben? Reicht es nicht völlig aus, wenn du einen Zeiger auf den Grafikpuffer übergibst? und wenn dieser z.B. Null ist, kannst du ja immer noch auf den Bildschirm zeichnen. Oder noch schöner: eine überladene Methode, die dies erledigt bzw. die jeweils andere dazu aufruft.
Hinweis: ImageCreate gibt ja nichts anderes als einen Zeiger auf den Grafikpuffer zurück. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 30.06.2013, 22:45 Titel: |
|
|
natürlich das würde ausreichen, komm nur noch nicht so zu recht mit den zeigern
ich versuchs mal
Code: |
Declare Sub zeichnen(bild as PTR, farbe as Integer, x as Integer, y as Integer)
Dim AS Any Ptr meinBild
meinBild = ImageCreate (100, 100)
zeichnen( @meinBild, &hFFFF00, 100, 100)
Put (20, 50), meinBild
Sleep
Sub zeichnen(bild as PTR, farbe as Integer, x as Integer, y as Integer)
Circle @bild (x/2, y/2), 25, farbe
End Sub |
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 30.06.2013, 23:11 Titel: |
|
|
Code: | Declare Sub zeichnen(bild as PTR, farbe as Integer, x as Integer, y as Integer) |
Wäre noch gut zu wissen, AS wasfürein PTR du verwenden willst. In deinem Fall:
Code: | Declare Sub zeichnen(bild as ANY PTR, farbe as Integer, x as Integer, y as Integer) |
und ein Komma nach dem ersten Parameter von CIRCLE. Und dann brauchst du den Pointer nicht referenzieren - du hast einen Pointer, du brauchst einen Pointer - also übergib einfach den Pointer
Code: | ScreenRes 200, 200, 32
Declare Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Dim AS Any Ptr meinBild
meinBild = ImageCreate (100, 100)
zeichnen( meinBild, &hFFFF00, 100, 100)
Put (20, 50), meinBild
Sleep
Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Circle bild, (x/2, y/2), 25, farbe
End Sub |
Wenn du für bild den Wert 0 übergibst, wird direkt in das Fenster gezeichnet. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 30.06.2013, 23:22 Titel: |
|
|
ich danke euch |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 05.07.2013, 12:19 Titel: |
|
|
ich hab noch 2 kleine Fragen
1 wieso ändert sich der Rückgabewert nicht nach dem ImageDestroy
2 wieso ist der wert von IDaddr(4) = 7 - egal was ID(4) ist. Im Bsp aus der Referenz (a = 5 : addr = @a : Print *addr ) ist der Wert von addr doch = a ???
Code: | Screenres 400, 400, 32
Dim AS integer ID(5)
ID(4)= 5
Dim AS integer PTR IDaddr(5)
IDaddr(4)= @ID(4)
IDaddr(4) = ImageCreate (100, 100, &hFFffffff)
Draw String IDaddr(4), (3, 3), "Hallo", &hFFff0000
Put (20, 20), IDaddr(4)
? *IDaddr(4) ' Ausgabe = 7
? ImageInfo (IDaddr(4)) ' Ausgabe = 0
ImageDestroy IDaddr(4)
? *IDaddr(4) ' Ausgabe = 7
? ImageInfo (IDaddr(4)) ' Ausgabe = 0
Sleep
|
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 05.07.2013, 13:25 Titel: |
|
|
IMAGEDESTROY zerstört nur die Speicherreservierung, d. h. ab sofort kann dieser Speicher wieder anderweitig verwendet werden. Es löscht dagegen weder den Speicherinhalt (der wird erst zerstört, wenn der Speicher tatsächlich anderweitig gebraucht wird) noch setzt es die Adresse auf 0. Wenn du sicher gehen willst, kannst du nach dem IMAGEDESTROY die Adresse noch per Hand auf 0 setzen.
IMAGECREATE initialisiert einen Grafikpuffer, und dazu wird automatisch gleich der passende Header eingerichtet. Dessen erstes Byte besitzt den Wert 7. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 05.07.2013, 14:45 Titel: |
|
|
ok danke. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|