Pregunta

Estoy tratando de convertir una imagen RGB a una imagen ARGB, básicamente, sólo la adición de 255 en el canal alfa. Me preguntaba si hay algún paquete de método de hacer esto sin iteración? Así que para iterar sobre mis datos RGB y anexar el 255 a cada píxel.

¿Fue útil?

Solución

C no tiene "métodos" ... Y no, esto no suena como algo que hay una rutina para la biblioteca estándar. Creo que se necesita para codificar usted mismo, usando algo como esto:

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

Los supuestos básicos:

  • orden embalaje es RGBA en la memoria, es decir, el desplazamiento es 3 al byte alfa, desde el principio del píxel.
  • La imagen se almacena con el píxel superior izquierdo en la dirección inicial, en la derecha a izquierda, de arriba a abajo orden.
  • No hay relleno o nada

También tenga en cuenta el orden de los bucles; esto puede hacer una gran diferencia en el rendimiento en el mundo real debido al almacenamiento en caché. Este código toca píxeles que están cerca en la memoria de forma secuencial, lo cual es bueno llamado "buena localidad".

Cambiar el puntero al punto en el siguiente pixel en vez de indicar la dirección (rgba[4 * y * width + 4 * x + 3]) es también una optimización, y (para mí) bastante fácil de entender.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top