Pergunta

Estou estudando getpixel32 () e as classes de dados de bitmap e bitmap. Basicamente, eu gostaria de saber como produzir um traço simples de um ARGB a partir de um valor hexadecimal.

Como um aparte, estou com a impressão, que presumo/espero que esteja errado, que os valores hexadecimais não possam produzir tantas cores quanto os valores do RGBA. Talvez o "segurança da web" tenha me deixado de entender a utilidade ou o desejo de usar cores produzem com valores hexadecimais.

Foi útil?

Solução

Para extrair as informações de cores, você deve trabalhar com operadores bit -bitwise. As cores são armazenadas como 0xaarrggbb, então você precisa extrair essas partes. O pequeno trecho deve fazer o trabalho:

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);

Dependendo de como você especifica os valores do RGBA, a resposta pode mudar. Se você usar os valores do RGBA em que cada canal é especificado por um byte, poderá expressar exatamente o valor de um valor hexadecimal. Seu "valor sexual" é um número inteiro não assinado que consiste em 4 bytes. No Flash, também há o tipo de número que consite de 64 bits para que cada canal fosse expresso um 8 bytes em vez de um. Você pode imaginar que você tem muito mais precisão. No entanto, provavelmente sua tela está definida como "True Color (32 bits)" e não poderá mostrar tantas cores. Você vai além da precisão dupla (64 bits) e usa precisão decimal, que é usada principalmente para cálculos financeiros. Cada valor consiste em 128 bits, que produz 16 bytes para cada canal. Isso é 16 vezes mais do que ao usar sua representação hexadecimal. É claro que isso é muito mais precisão, mas seu monitor não será capaz de lidar com isso.

Uma nota lateral. O tamanho da sua imagem também tem larguraalturacanais*(bytes por canal). Portanto, se você usar um byte por canal, que é de 8 bits, você já recebe cores suficientes. Para uma grande imagem, a diferença é muito grande se você passar de 8 a 32 bits por canal.

Uma imagem de 1024x768 com precisão de 8 bits é 3072kb, enquanto a mesma imagem de 32 bits é 12288kb na memória. Essa mesma imagem adotaria 24576kb usando o tipo de número do Flash. Portanto, você provavelmente é melhor para ficar com precisão de 8 bits, o que deve ser suficiente na maioria dos casos.

Espero que isso ajude e você tenha um melhor entendimento das imagens e sua estrutura.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top