Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 14.03.2010, 10:50 Titel: Mit Zeiger abfragen? |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 14.03.2010, 13:36 Titel: |
|
|
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 |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 14.03.2010, 15:48 Titel: |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 14.03.2010, 16:34 Titel: |
|
|
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 |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 14.03.2010, 21:04 Titel: |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 14.03.2010, 21:41 Titel: |
|
|
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 |
|
 |
|