Frage

Ich versuche, ein RGB-Bild zu einem ARGB Bild zu konvertieren, im Grunde nur das Hinzufügen 255 in für den Alphakanal. Ich habe mich gefragt, ob es eine Packung Methode ist dies ohne Iteration zu tun? Also meine RGB-Daten iterieren und hängen an jedes Pixel die 255.

War es hilfreich?

Lösung

C nicht über „Methoden“ ... Und nein, das klingt nicht wie alles gibt es eine Routine für die in der Standardbibliothek. Ich glaube, Sie brauchen es, Code selbst, so etwas wie dies mit:

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

Grundannahmen:

  • Auftrag Verpackung ist RGBA im Speicher, das heißt den Versatz 3 an den alpha-Byte vom Beginn des Pixels.
  • Das Bild wird mit dem linken oberen Pixel an der Anfangsadresse, in von rechts nach links, von oben nach unten Reihenfolge gespeichert.
  • Es gibt keine Polsterung oder irgendetwas

Beachten Sie auch, um von Schleifen; Dies kann einen großen Unterschied zu realen Leistungsfähigkeit aufgrund Caching machen. Dieser Code berührt Pixel, die in der Folge im Speicher der Nähe sind, die „guter Ort“.

genannt ist gut

Ändern der Zeiger auf Punkt, an dem nächsten Pixel anstatt unter Angabe der Adresse (rgba[4 * y * width + 4 * x + 3]) ist auch eine Optimierung und (für mich) leicht genug, um zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top