Angenommen das Bild ist w * h Pixel, und gespeichert in True "gepackten" RGB-Format ohne Alpha-Komponente, jedes Pixel wird drei Bytes benötigen.
Im Speicher wird die erste Zeile des Bildes könnte in ehrfürchtigen ASCII Grafiken wie folgt dargestellt werden:
R0 G0 B0 R1 G1 B1 R2 G2 B2 ... R(w-1) G(w-1) B(w-1)
Hier ist jede R n G n und B n ein einzelnes Byte repräsentiert , geben die rote, grüne oder blaue Komponente des Pixels n dieser Scanline. Beachten Sie, dass die Reihenfolge der Bytes für verschiedene "rohe" Formate unterschiedlich sein kann. Es gibt keinen vereinbarten Weltstandard. Verschiedene Umgebungen (Grafikkarten, Kameras, ...) machen es aus welchen Gründen auch immer anders, man muss nur das Layout kennen.
ein Pixel auslesen kann dann durch diese Funktion erfolgen:
typedef unsigned char byte;
void get_pixel(const byte *image, unsigned int w,
unsigned int x,
unsigned int y,
byte *red, byte *green, byte *blue)
{
/* Compute pointer to first (red) byte of the desired pixel. */
const byte * pixel = image + w * y * 3 + 3 * x;
/* Copy R, G and B to outputs. */
*red = pixel[0];
*green = pixel[1];
*blue = pixel[2];
}
Beachten Sie, wie die Höhe des Bildes nicht dafür benötigt wird, zu arbeiten, und wie die Funktion von Grenzen Prüfung frei ist. Eine Produktionsqualitätsfunktion könnte stärker gepanzert sein.
aktualisieren Wenn Sie diesen Ansatz Sorgen machen wird zu langsam sein, können Sie natürlich die Pixel nur eine Schleife über, statt:
unsigned int x, y;
const byte *pixel = /* ... assumed to be pointing at the data as per above */
for(y = 0; y < h; ++y)
{
for(x = 0; x < w; ++x, pixel += 3)
{
const byte red = pixel[0], green = pixel[1], blue = pixel[2];
/* Do something with the current pixel. */
}
}
Sie müssen angeben, wie das "rohe Bild" dargestellt wird und welches Format es hat. – sharptooth
Definieren Sie "Rohbild". Ist es eine Bilddatei? Wenn ja, welche Art von Datei? Oder versuchen Sie, eine Bildschirmaufnahme zu machen?Bearbeiten Sie Ihre Frage, um die Details hinzuzufügen. – Artelius
Welches Format ist Ihr "rohes" Bild. Ist es eine Bitmap oder eine Bilddatei, die vielleicht von einer Kamera stammt? – ChrisBD