Pergunta

Eu estou tentando converter uma imagem RGB para uma imagem ARGB, basicamente, apenas adicionando 255 em para o canal alfa. Eu queria saber se existe algum método pacote de fazer isso sem iteração? Então, para iterar sobre os meus dados RGB e anexar o 255 para cada pixel.

Foi útil?

Solução

C não tem "métodos" ... E não, isso não soa como nada há uma rotina para na biblioteca padrão. Eu acho que você precisa de código-lo sozinho, usando algo parecido com isto:

void setAlpha(unsigned char *rgba, int width, int height, int alpha)
{
  int x, y;

  for(y = 0; y < height; y++)
  {
    for(x = 0; x < width; x++, rgba += 4)
    {
      rgba[3] = (unsigned char) alpha;
    }
  }
}

Os pressupostos básicos:

  • a fim de embalagem é rgba na memória, isto é, o deslocamento é 3 para o byte alfa, desde o início do pixel.
  • A imagem é armazenada com o pixel superior esquerdo no endereço inicial, no da direita para a esquerda, de cima para baixo fim.
  • Não existe nenhum preenchimento ou qualquer coisa

Além disso, observe a fim de loops; isso pode fazer uma enorme diferença para o desempenho no mundo real devido ao cache. Isso toca código pixels que estão próximos na memória em seqüência, o que é bom chamado de "boa localidade".

Alterar o ponteiro para apontar para o próximo pixel em vez da indicação do endereço (rgba[4 * y * width + 4 * x + 3]) é também uma otimização, e (para mim) bastante fácil de entender.

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