Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-12-2005, 09:50   #1 (permalink)
xtremeist
 
Registriert seit: Jun 2001
Ort: Dresden
Beiträge: 103
ARGB auslesen (gelöst)

Versuch grad ein Hexdezimalwert der eine ARGB-Farbkombination darstellt auszulesen. Klappt alles super bis auf den Alpha-Wert, der streikt ab 127 (dez) bzw. '7F' (hex). Kann mir das irgendwie nicht erklären, deswegen hier mal mein Code:
Code:
//                     a r g b
var argb:Number   = 0x11223344;  // funzt prima
//var argb:Number = 0x7FAABBCC; // funzt auch noch
//var argb:Number = 0xAABBCCDD; // funzt garnicht

var a:Number = (argb & 0xFF000000) >> 24;
var r:Number = (argb & 0x00FF0000) >> 16;
var g:Number = (argb & 0x0000FF00) >> 8 ;
var b:Number = (argb & 0x000000FF);

trace("argb: "+ argb.toString(16).toUpperCase());
trace("\tdez\t\thex");
trace("a: \t"+ a +"\t\t"+ a.toString(16).toUpperCase());
trace("r: \t"+ r +"\t\t"+ r.toString(16).toUpperCase());
trace("g: \t"+ g +"\t\t"+ g.toString(16).toUpperCase());
trace("b: \t"+ b +"\t\t"+ b.toString(16).toUpperCase());
Vielen Dank schonmal!
mfg sHo

ps.: Testplatform ist Flash MX 2004, sollte aber eigentlich ab F5 funktionieren.
__________________

Das Durchschnittliche gibt der Welt Ihren Bestand, das Außergewöhnliche Ihren Wert. [Oscar Wilde]

Geändert von Stefan H. (01-12-2005 um 11:21 Uhr)
Stefan H. ist offline   Mit Zitat antworten
Alt 01-12-2005, 10:07   #2 (permalink)
xtremeist
 
Registriert seit: Jun 2001
Ort: Dresden
Beiträge: 103
Problem ist wohl, dass Flash da an das Maximum der zulässigen numerischen Werte einer Variablen stößt. Wird wohl noch mit unsigned 32bit Integer gerechnet (0 bis 4294967295) ab Flash 8 scheint das aber schon behoben. Frag ich mich aber: rechnet F8 schon mit 64bit Integer? Naja auf F7 muss ich das wohl irgendwie anders lösen und die Werte seperat speichern und berechnen. Thema kann geschlossen werden.

mfg sHo
__________________

Das Durchschnittliche gibt der Welt Ihren Bestand, das Außergewöhnliche Ihren Wert. [Oscar Wilde]

Geändert von Stefan H. (01-12-2005 um 10:13 Uhr)
Stefan H. ist offline   Mit Zitat antworten
Alt 01-12-2005, 23:07   #3 (permalink)
xtremeist
 
Registriert seit: Jun 2001
Ort: Dresden
Beiträge: 103
Hat mir irgendwie keine Ruhe gelassen also hab ich mir das nochmal angeschaut.

Ich streiche den vorherigen Post von mir! Problem scheint nicht beim Datentypen zu liegen.
Flash(7) speichert Zahlen von -4294967295 bis 4294967295 also unsigned integer (wobei auch
negativ). Irgendwie hat der BITWISE-AND-Operator (&) Problem mit Zahlen über 2147483647.
Zum Test:
Code:
// 0x7FFFFFFF (hex) entspricht 2147483647 (dez)
trace( (0x7FFFFFFF & 0xFF000000) ); // Ausgabe: 2147483647 - richtig!
// 0x80000000 (hex) entspricht 2147483648 (dez)
trace( (0x80000000 & 0xFF000000) ); // Ausgabe: -2147483648 - falsch!
Die Doku meint : "Operator (bitwise); converts expression1 and expression2 to 32-bit unsigned integers,..
The result is a new 32-bit unsigned integer." Also sollte es ja funktionieren, scheint aber so als würde
signed Integer unterstützen also bis maximal 2147483647. Seis drumm, habs mit dem Operator ">>>" gelöst :
Code:
//                a r g b
var argb:Number   = 0xAABBCCDD;  // funzt prima

var a:Number = argb >>> 24;
var r:Number = (argb & 0x00FF0000) >> 16;
var g:Number = (argb & 0x0000FF00) >> 8 ;
var b:Number = (argb & 0x000000FF);

trace("argb: "+ argb.toString(16).toUpperCase());
trace("\tdez\t\thex");
trace("a: \t"+ a +"\t\t"+ a.toString(16).toUpperCase());
trace("r: \t"+ r +"\t\t"+ r.toString(16).toUpperCase());
trace("g: \t"+ g +"\t\t"+ g.toString(16).toUpperCase());
trace("b: \t"+ b +"\t\t"+ b.toString(16).toUpperCase());
mfg sHo
__________________

Das Durchschnittliche gibt der Welt Ihren Bestand, das Außergewöhnliche Ihren Wert. [Oscar Wilde]

Geändert von Stefan H. (01-12-2005 um 23:15 Uhr)
Stefan H. ist offline   Mit Zitat antworten
Alt 01-12-2005, 23:43   #4 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
PHP-Code:
static function ARGB_HEX(ARGB) {
        var 
Col = {};
        if (
arguments.length>1) {
            
Col.HEX = (<< 24 << 16 << B);
            
Col.A;
            
Col.R;
            
Col.G;
            
Col.B;
        } else {
            
Col.= (>> 24) & 0xFF;
            
Col.= (>> 16) & 0xFF;
            
Col.= (>> 8) & 0xFF;
            
Col.0xFF;
            
Col.HEX A;
        }
        return 
Col;
    } 
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele