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:

Mit Zeiger abfragen?

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


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 14.03.2010, 10:50    Titel: Mit Zeiger abfragen? Antworten mit Zitat

Bei hdnviereck0 hdnviereck0=imagecreate(x,y) wird der Alphakanal abgefragt ob er gesetzt ist. Funtioniert allles tadellos mit der gesammten abfrage.

Nun möchte ich diese Werte in der Schleife "If allpha=255 Then"irgendwie mit einem Zeiger abfragen und nicht einzelnn mit "red" und usw.

"hdnviereck" wurde auch mit "imagecreate" hergestellt.

Wie kann man es machen mit einer Zeigerabfrage(RGB), wo dann der Alphawert rausgefiltert wird?

Gruss

Code:

For yz=0 To yw-1
      For xz=0 To xw-1
         allpha=PEEK(UBYTE,hdnviereck0+32+(xz*4)+(yz*pitch)+3)
         If allpha=255  Then   
            red=PEEK(UBYTE,hdnviereck+32+(xz*4)+(yz*pitch)+2)
            green=PEEK(UBYTE,hdnviereck+32+(xz*4)+(yz*pitch)+1)
            blue=PEEK(UBYTE,hdnviereck+32+(xz*4)+(yz*pitch)+01)
            If red=255 Or green=255 Then
               zz=zz+1
               Locate 20,2   
               Print zz
               Exit Sub
            EndIf   
         EndIf      
      Next
   Next
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 14.03.2010, 13:36    Titel: Antworten mit Zitat

Es würde dir gut tun ab und zu in die Referenz zu schauen statt immer gleich zu fragen. Unter RGBA (<- das ich übrigens ein Link zur Referenz) steht zB das hier:
Code:
#DEFINE RGBA(r,g,b,a) ((CINT(a) SHL 24) OR (CINT(r) SHL 16) OR (CINT(g) SHL 8) OR CINT(b))


Damit kann man im Normalfall schon viel erreichen. Ein Beispiel:
Code:
Dim As UInteger a
Dim As UByte b

a = RGBA(250,250,255,150)
b = a Shr 24

Print Hex(a), Hex(b), b
Sleep


Noch eine Anmerkung am Rande: von Peek und Poke würde ich mich in Zeiten von Pointern trennen.

Und wenn du doch auf Pointern bestehen willst, dann so:
Code:
Dim As UByte Ptr c

c = Cast(UByte Ptr, Cast(UInteger, (@a)) + 3)

Print *c
Sleep


edit: a muss natürlich ein UInteger sein


Zuletzt bearbeitet von MOD am 14.03.2010, 16:30, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 14.03.2010, 15:48    Titel: Antworten mit Zitat

Jup, danke.

Mit dem CAST geht es wunderbar.

Dieses mit dem RGBA und Ergebnis ist mir zu langsam für eine Pixelcollision.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 14.03.2010, 16:34    Titel: Antworten mit Zitat

Wie kommst du darauf, dass RGBA langsamer ist?

Bei mir ist diese Methode 3-4x schneller als die Pointermethode.

Man beachte bitte auch meine Ausbesserung des letzten Posts.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 14.03.2010, 21:04    Titel: Antworten mit Zitat

a = RGBA(250,250,255,150)
b = a SHR 24

Ich muss die Werte auch noch hier reinsetzen RGBA(.......)..

Ich habe eine Spritepixelcollison, hier müssen 10 Flächen 128x128Pixel mit 4 Sprite 64x64 auf Pixelcollison geprüft werden.

Ich glaube nicht, das das hier schon einer mal Fabriziert hat mit einem Openglscreen und gleichzeitig daneben den Freebasicscreen im Grafikmodus.

Ist ein Versuchsaufbau, weil man mit Opengl schöne Sprite mit verschiedenen unabhängig drehenden Gelenken an einer Fläche/Körper mit Transparent darstellen kann.

Habe eine schnelle Lösung gefunden mit der Alphafläche und Pointern

Gruss

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 14.03.2010, 21:41    Titel: Antworten mit Zitat

wow, dann bin ich ja so der mega 0wner weil ich ja beliebig viele opengl scräns in dem ich sein editor machen kann


---

Bist du dir sicher, dass du keine orthographisch korrekter abgefassten Texte in diesem Forum posten kannst?

---

Was nützt mir ein FB Screen, wenn ich schon eine OpenGL Zeichenfläche habe? Habe ich was verpasst, oder hat das auf einmal irgendwelche großartigen Vorteile?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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