Domanda

Sto studiando getPixel32 () e le classi Bitmap e bitmap dati. In sostanza, mi piacerebbe sapere come uscita una semplice traccia di un ARGB da un valore esadecimale.

Per inciso, io sono sotto l'impressione, che presumo / speranza è sbagliato, che i valori esadecimali non può produrre il maggior numero di colori come valori RGBA. forse "web sicuro" mi ha buttato fuori con la comprensione l'utilità o desiderio di utilizzare i colori produce con valori esadecimali.

È stato utile?

Soluzione

Per estrarre le informazioni di colore si deve lavorare con gli operatori bit per bit. I colori sono memorizzati come 0xAARRGGBB in modo da avere per estrarre quelle parti. Il piccolo frammento dovrebbe fare il lavoro:

var hex: uint = 0x00ff00ff;
var a: int = (hex >>> 0x18) & 0xff;
var r: int = (hex >>> 0x10) & 0xff;
var g: int = (hex >>> 0x08) & 0xff;
var b: int = hex & 0xff;

trace(a, r, g, b);

A seconda di come si specifica RGBA valorizza il cambiamento risposta potrebbe. Se si utilizzano i valori RGBA dove ogni canale è specificato da un byte, è possibile esprimere esattamente tanto colori come in un valore esadecimale. Vostro "valore esadecimale" è un intero senza segno composto da 4 byte. In Flash v'è anche il tipo Number che consitsts di 64 bit in modo che ciascun canale sarebbe espressa a 8-byte invece di uno. Si può immaginare che avete molto più precisione. Tuttavia, probabilmente il vostro schermo è impostata su "True Color (32 bit)" e non sarà in grado di dimostrare che molti colori. Si va anche oltre a precisione doppia (64 bit) e la precisione utilizzo decimale, che è in gran parte utilizzato per i calcoli finanziari. Ogni valore è costituito da 128 bit che rende 16 byte per ciascun canale. Che è 16 volte più di quando si utilizza il rappresentazione esadecimale. Certo che è molto più precisione, ma il monitor non sarà in grado di gestirlo.

Una nota a margine. La vostra dimensione dell'immagine è anche la larghezza Altezza canali * (byte per canale). Quindi, se si utilizza un byte per canale, che è a 8 bit si ottiene già abbastanza colori. Per una grande immagine la differenza è abbastanza grande se si va da 8-bit a 32-bit per canale.

Un'immagine 1024x768 con 8 bit precisione è 3072kb mentre la stessa immagine a 32 bit è 12288kb in memoria. Quella stessa immagine prenderebbe 24576kb utilizzando il tipo di numero di Flash. Così si sono probabilmente meglio di stare con precisione a 8 bit che dovrebbe essere sufficiente nella maggior parte dei casi.

Mi auguro che aiuta e si dispone di una migliore comprensione, la società delle immagini e la loro struttura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top