ReadPixel Problem
Übersicht

H1zBetreff: ReadPixel Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group