Domanda

Sto cercando di convertire un'immagine RGB in un'immagine ARGB, fondamentalmente solo l'aggiunta di 255 in per il canale alfa. Mi chiedevo se c'è qualche metodo pack di fare questo senza l'iterazione? Quindi, per iterare sui miei dati RGB e aggiungere il 255 per ogni pixel.

È stato utile?

Soluzione

C non ha "metodi" ... E no, questo non suona come niente c'è una routine per nella libreria standard. Penso che è necessario il codice da soli, utilizzando qualcosa di simile a questo:

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

Ipotesi di base:

  • ordine imballaggio è RGBA nella memoria, cioè l'offset è 3 al byte alfa, dall'inizio del pixel.
  • L'immagine viene memorizzata con il pixel in alto a sinistra all'indirizzo iniziale, in destra a sinistra, dall'alto verso il basso ordine.
  • Non v'è alcuna imbottitura o niente

Si noti inoltre ordine di cicli; questo può fare una grande differenza per le prestazioni reali a causa di caching. Questo codice tocca pixel che sono vicini in memoria in sequenza, che è buono chiamato "buona frazione".

La modifica il puntatore per punto alla prossima pixel anziché la semplice affermazione l'indirizzo (rgba[4 * y * width + 4 * x + 3]) è anche un'ottimizzazione, e (per me) abbastanza facile da capire.

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