Komischer alphawert

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

sbrog

Betreff: Komischer alphawert

BeitragDo, Sep 02, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Timo und ich, haben gerade in einem andern Thread über Alphawerte diskutiert. Dabei viel uns dieser Code ins Auge . (oder ein ähnlicher)

Code: [AUSKLAPPEN]

Graphics 800,600


farbe = $FFFFFFFF  ;Farbe Rot mit 0 transparenz

WritePixel 1,1,farbe ;Pixel 1,1 rot färben

rgb = ReadPixel(1,1)  ;Das rote Pixel einlesen

a=(rgb And $FF000000)/$1000000 ;und den Alphawert rausfiltern

Print a  ;Sollte 255 sein,  ist aber -1

WaitKey



Ein Pixel wird mit alphawert 255 gezeichnet, wieder eingelesen, und hat dann bei der ausgabe - 1. Wieso nicht 255 ?[/code]
 

Timo

BeitragDo, Sep 02, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
mir ist mal was aufgefallen!!
probier das hier mal
Code: [AUSKLAPPEN]
Graphics 800,600


farbe = $FFFFFFFF  ;Farbe Rot mit 0 transparenz

WritePixel 1,1,farbe ;Pixel 1,1 rot färben

rgb = ReadPixel(1,1)  ;Das rote Pixel einlesen
Print bin(rgb) + " Binäre kodierung von rgb"

a=(rgb And $FF000000)/$1000000 ;und den Alphawert rausfiltern

print bin(a) + " Binäre kodierung von a"
Print a  ;Sollte 255 sein,  ist aber -1

WaitKey


nach der berechnung ist a dasselbe wie rgb, alle Bits sind gesetzt, und da alle Bits gesetzt, deshalb "-1"

[EDIT] es liegt an der Division, denn wenn man nur AND durchlaufen lässt und anschließend sich die Bitfolge anguckt sind nur die Oberen gesetzt, wie man es haben will...[/EDIT]

Xenon

BeitragDo, Sep 02, 2004 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man nicht filtern kann...

[EDIT]Achja erklärung vergessen ^^, also mit Divison filtern ist sowieso schlecht, da die division ja bei weitem langsamer ist als die bitshift operationen.

Das das mit der Division nicht klappt, liegt daran, dass das vorderste Bit für + oder - steht und somit was falsches rauskommt, man sehe sich den dezimalen Wert von $FF000000 an, ebenso den dezimalen Wert von $1000000, durch den man dividiert.

Code: [AUSKLAPPEN]
Print $FF000000
Print $01000000


Tjo sind tatsächlich die selbe zahlen nur das eine negativ ist. Und was kommt jetzt bei der Division raus? =)[/EDIT]

Code: [AUSKLAPPEN]
Graphics 800,600


farbe = $FFFFFFFF ;Farbe Weiß mit 0 transparenz

WritePixel 1,1,farbe ;Pixel 1,1 weiß färben

rgb = ReadPixel(1,1) ;Das weiße Pixel einlesen
Print Bin(rgb) + " Binäre kodierung von ARGB"

a=(rgb Shr 24) And $FF ;und den Alphawert rausfiltern

Print Bin(a) + " Binäre kodierung von a"
Print a ;Sollte 255 sein, ist aber -1

WaitKey
 

Dreamora

BeitragDo, Sep 02, 2004 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Euch ist schon klar, dass der Alphawert IMMER 255 aus gibt, egal was ihr für ihn eingebt oder?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TheShadow

Moderator

BeitragDo, Sep 02, 2004 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hm ja das ist ein kleiner fehler...

benutze besser

a=(rgb SHR 24)
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Timo

BeitragFr, Sep 03, 2004 8:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Onlinehilfe hat Folgendes geschrieben:

Berechnung der Farbanteile aus einem Farbcode:
a=(rgb AND $FF000000)/$1000000


ist das dann falsch? -- oder nur richtig wenn das msb nicht gesetzt ist?

Xenon

BeitragFr, Sep 03, 2004 10:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht wie gesagt ums vorderste Bit und da BB nur eine signed Division draufhat, wirst du da mit der Division nicht glücklich. Außerdem sind die Bitshift Operationen wie gesagt um einiges schneller (auch wenn man es nicht merkt Wink ).

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group