ReadPixel Problem

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

H1z

Betreff: ReadPixel Problem

BeitragDo, Mai 17, 2007 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich verzweifle an folgendem Problem:

Der Folgende Code sollte einen pixel lesen, falls dieser nicht einen Alpha-Wert von 1 hat (also jeder pixel der nicht absolut undurchsichtig ist) ihn Schwarz färben, ansonsten ihn komplett durchsichtig machen.

Code: [AUSKLAPPEN]

Local pixel:long = ReadPixel(pixmap, x Mod TILE_SIZE, y Mod TILE_SIZE)
   If pixel < $FF000000 Then
      WritePixel(pixmap, x Mod TILE_SIZE, y Mod TILE_SIZE, $FF000000)
   Else
      WritePixel(pixmap, x Mod TILE_SIZE, y Mod TILE_SIZE, 0)
   EndIf


Das ganze funzt natürlich nicht.

Eigentlich ist das einzige Problem dieses hier:

Code: [AUSKLAPPEN]

If pixel < $FF000000 Then


Ich versteh nicht warum es nicht funktioniert.
Ich will den Wert von "pixel" nicht extra in einen dezimalwert umwandeln, es sollte ja im grunde auch so gehen.

Bitte um Hilfe!

d-bug

BeitragDo, Mai 17, 2007 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist kein Long sondern ein Integer.

Mal davon abgesehen müsste bei deinem Code jeder ausgelesene Pixel
schwarz sein. $FF000000 ist und bleibt nunmal Schwarz!

Wenn du diese Zeile:
Code: [AUSKLAPPEN]
If pixel < $FF000000 Then

nach
Code: [AUSKLAPPEN]
If ((pixel Shr 24) & $FF) < $FF Then

änderst sollte es doch eigentlich klappen...

Natürlich nur, wenn du aus dem Long ein Integer machst.
Das ist zwar genau das was du nicht willst, aber anders gehts nicht.
Natürlich könntest du auch direkt den PixelPointer abfragen...
 

H1z

BeitragDo, Mai 17, 2007 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Mhh also long hatte ich nur mal ausprobiert weil ich dachte int sei vielleicht nicht groß genug.

Aber ich versteh nicht wieso es nicht ohne Umrechnen geht:

zb ist $AAFF0000 (ein halb durchsichtiges Rot) doch kleiner als $FF000000.
 

ChristianK

BeitragDo, Mai 17, 2007 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst statt dem gesamten Farbwert nur den Alphawert auslesen, der in den 8 höchstwertigen Bits gespeichert wird:

Code: [AUSKLAPPEN]
alpha = ( farbe & $FF000000 )

Es wird ein Integer verwendet, weil eine Farbe / Alpha Werte von 0 bis 254 belegt. Das ganze dann für Rot, Grün, Blau und Alpha
-> macht 32-Bit -> Integer.

Edit:
@d-bug,
sry, ich hatte deinen Code übersehen ...

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group