Komischer alphawert
Übersicht

![]() |
sbrogBetreff: Komischer alphawert |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm ja das ist ein kleiner fehler...
benutze besser a=(rgb SHR 24) |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group