• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-05-2008, 09:36   #1 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.248
Farbe heller berechnen?

hi,

meine Farbe 0xcc0000 ist mir für einen gewissen Fall zu dunkel. Ich möchte einen Farbwert hinzuaddieren, um einen helleren Ton zu bekommen.

0xcc0000 + 0x333333 = 0xff3333;
Wunderbar!

Nun möchte ich die Farbe aber noch heller haben:
0xcc0000 + 0x444444 = 0x1104444;
PLÖT!

Mir ist zwar klar, wieso das passiert, aber kennt evtl. jemand eine Berechnung, in der die einzelnen Farbkanäle nicht über ff gesteuert werden?

thx 4 tips!
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 30-05-2008, 09:46   #2 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.644
Hexadezimalzahlen zusammenrechnen ist ja eigentlich auch kaum eine Lösung, weil eine Steigerung um sagen wir 3355443 (0x333333) nicht eine symetrische Helligkeitsveränderung darstellt sondern ne ganz andre Farbe im Farbraum sein kann.

Ich hab für sowas mal ne kleine hex-color-Brightness-Klasse geschrieben, die über den Zwischenschritt geht, die Hex-Zahl in ein rgb-Array umzuwandeln und später wieder zurück.
Allerdings AS3, aber das Prinzip ist auch AS1-tauglich und sollte leicht umschreibbar sein.
Angehängte Dateien
Dateityp: zip ChangeHexColor.zip (1,2 KB, 44x aufgerufen)
__________________
we will stop enhancing the truth in 3, 2, ...

Geändert von SpecOps-12 (30-05-2008 um 09:49 Uhr)
SpecOps-12 ist offline   Mit Zitat antworten
Alt 30-05-2008, 09:56   #3 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.248
öhm, okay.
du scheinst also einen ähnlichen weg zu gehen, wie ich es im moment mache:

PHP-Code:
function getBrightColor(colbright){
    if(
bright == undefined){
        
bright 0x888888;
    }
    
ra = (col 0xff0000) >> 16;
    
ga = (col 0x00ff00) >> 8;
    
ba col 0x0000ff;
    
    
rb = (bright 0xff0000) >> 16;
    
gb = (bright 0x00ff00) >> 8;
    
bb bright 0x0000ff;
    
    
rc ra+rb;
    if(
rc 255){
        
rc 255;
    }
    
gc ga+gb;
    if(
gc 255){
        
gc 255;
    }
    
bc ba+bb;
    if(
bc 255){
        
bc 255;
    }
    
    
hex "0x" + (rc << 16 gc << bc).toString(16);

    return 
hex;

nungut, ich lasse es einfach dabei. dachte, evtl. gibt es einen ganz schlanken weg, aber so ist's auch okay.

thx
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 30-05-2008, 10:18   #4 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.644
Nicht das ich wüsste.
Ab AS2 kann man natürlich ColorTransform oder ne TweenKlasse direkt auf's Objekt ansetzen.

Außer r,g und b aufzutrennen und einzeln zu berechnen gibt's keinen Weg.
Weil Hex-Zahlen sind für Flash ganz normale Zahlen, das sieht man auch, wenn man mal eine austraced. Und da kann dann im Farbraum, übertrieben gesprochen, 1.225.222 noch kaminrot sein, 1.225.223 dann aber giftgrün.
__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 08-03-2010, 21:13   #5 (permalink)
Neuer User
 
Registriert seit: Aug 2009
Beiträge: 15
is ja jetzt schon ein paar jahre her. war aber genau das was ich gebraucht habe...Danke. ich war mal so frei und hab die oben gepostete klasse umgeschrieben.

Den Satz habe ich nicht verstanden:
"Außer r,g und b aufzutrennen und einzeln zu berechnen gibt's keinen Weg."

PHP-Code:

package
    
{
    
import NumberUtil;
    

    public class 
colorTransform 
        
{
            
        public static function 
brightness(color:uintamount:Number):uint 
            
{
            var 
rgb:Array = NumberUtil.hexToDec(color);

            for (var 
i:String in rgb)
                {
                
rgb[i] += Math.round(255 100 amount);
                if (
rgb[i]> 255rgb[i] = 255; else if (rgb[i] < 0rgb[i] = 0;
                }                
                
            return 
NumberUtil.decToHex(rgb);
            }
            
            
        }
    }



package 
    
{        
    public class 
NumberUtil
        
{

        public static function 
hexToDec(hex:uint):Array 
            {
            var 
r:int=hex >> 16 0xFF;
            var 
g:int=hex >> 0xFF;
            var 
b:int=hex 0xFF;
            return [
r,g,b];
            }

        public static function 
decToHex(dec:Array):uint 
            
{            
            var 
hex:String "";
            
            for (var 
i:String in dec)
                {
                var 
ff:String dec[i].toString(16);
                if (
ff.length <= 1ff "0" ff;
                
hex += ff;
                }
                
            return 
uint("0x" hex);
            }
            
        }
    } 
Jetzt gehts dunkler und heller.
__________________
if(true) trace("jajajajajajajajaja");
else trace("hgjfhfggj");
mk-anti 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 23:47 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele