Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

grafikpuffer

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 30.06.2013, 21:58    Titel: grafikpuffer Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 30.06.2013, 22:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 30.06.2013, 22:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 30.06.2013, 23:11    Titel: Antworten mit Zitat

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 zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 30.06.2013, 23:22    Titel: Antworten mit Zitat

ich danke euch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 05.07.2013, 12:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 05.07.2013, 13:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 05.07.2013, 14:45    Titel: Antworten mit Zitat

ok danke.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz