Question

Je suis en train de convertir une image RVB à une image ARVB, fondamentalement juste ajouter 255 pour le canal alpha. Je me demandais s'il y a une méthode pack pour le faire sans itération? Donc, pour itérer sur mes données RVB et ajouter 255 à chaque pixel.

Était-ce utile?

La solution

C ne pas « méthodes » ... Et non, cela ne ressemble pas à quoi que ce soit il y a une routine dans la bibliothèque standard. Je pense que vous devez le code vous-même, en utilisant quelque chose comme ceci:

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

Hypothèses de base:

  • Afin d'emballage est RVBA en mémoire, à savoir le décalage est égal à 3 à l'octet d'alpha, dès le début du pixel.
  • L'image est enregistrée avec le pixel supérieur gauche à l'adresse initiale, à droite à gauche, de haut en bas pour.
  • Il n'y a pas de remplissage ou quoi que ce soit

A noter également l'ordre de boucles; cela peut faire une énorme différence de performance dans le monde réel en raison de la mise en cache. Ce code touche pixels qui sont proches en mémoire dans l'ordre, ce qui est bon appelé « bon endroit ».

Modification du pointeur sur le point au pixel suivant au lieu d'énoncer l'adresse (rgba[4 * y * width + 4 * x + 3]) est également une optimisation et (me) assez facile à comprendre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top