Suponiendo que la imagen es w * h píxeles, y se almacena en verdadero formato RGB "empaquetado" sin componente alfa, cada píxel requerirá tres bytes.
en la memoria, la primera línea de la imagen puede ser representado en gráficos impresionantes ASCII como esto:
R0 G0 B0 R1 G1 B1 R2 G2 B2 ... R(w-1) G(w-1) B(w-1)
Aquí, cada R n G n y B n representa un solo byte , dando el componente rojo, verde o azul del píxel n de esa línea de exploración. Tenga en cuenta que el orden de los bytes puede ser diferente para diferentes formatos "crudos"; no hay un estándar mundial acordado. Diferentes entornos (tarjetas gráficas, cámaras, ...) lo hacen de manera diferente por cualquier razón, simplemente tiene que conocer el diseño.
Lectura de un píxel a continuación, se puede hacer por esta función:
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];
}
Observe cómo no se necesita la altura de la imagen para que esto funcione, y cómo la función está libre de los límites de comprobación. Una función de calidad de producción podría estar más blindada.
actualización Si está preocupado este enfoque será demasiado lenta, se puede, por supuesto, solo bucle sobre los píxeles, en lugar:
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. */
}
}
Debe especificar cómo se representa la "imagen sin procesar" y qué formato es. – sharptooth
Defina "imagen sin procesar". ¿Es un archivo de imagen? Si es así, ¿qué tipo de archivo? ¿O estás tratando de hacer una captura de pantalla?Edite su pregunta para agregar los detalles. – Artelius
¿Qué formato es tu imagen "en bruto"? ¿Es quizás un mapa de bits o un archivo de imagen tomado de una cámara? – ChrisBD