¿Cómo extraer el valor de color RGB de cualquier punto en una imagen determinada usando programación C++?
#incluye & ltstdio.h & gt
#incluye & ltstdlib.h & gt
#incluye & ltmalloc.h & gt
typedef DWORD largo sin signo
typedef int BOOL
byte de carácter sin signo typedef;
palabra corta sin signo typedef;
etiqueta de estructura typedefBITMAPINFOHEADER {
DWORD biSize
Largo y doble ancho;
Doble que alto;
WORD biSize;
Word biBitCount
Compresión de palabra doble;
DWORD biSizeImage
BiXPelsPerMeter largo
BiXPelsPerMeter largo;
DWORD biSizeImage
Long biXPelsPerMeter;
p>
DWORD biClrUsed
DWORD biClrImportant
} BITMAPINFOHEADER
int leer BMP(const char * nombre de archivo SZ);
int GetDIBColor(int
long LineByteWidth
int main(void)
{
int x, y;
byte r, g, b;
int n;
char SZ nombre de archivo[255]= "c:\ \ 1 . BMP ";
if (ReadBmp(szfilename) = = 0)
{
printf("Error al leer el archivo %s", SZ nombre de archivo);
Retorno 1;
}
printf("Ancho: %ld\n ", BIH . bi Ancho
<); p>printf("Altura: %ld\n ", BIH . BIH Altura);printf("BitCount: %d\n\n ", (int)BIH . bibitcount
mientras(1)
{
printf("Ingrese X:");
scanf("%d ", & ampx);
if(x <0)
Pausa;
printf("Ingrese Y:");
scanf("% d ",&y);
if (GetDIBColor(x ,y,&r &g,&b) == 1)
printf("(%d,%d): r:%d,g:%d,b:%d\ n ", x, y, (int)r, (int)g, (int)b);
Otros
printf("Error de entrada.
\ n ");
}
Gratis (almacenamiento en búfer);
Devuelve 0;
}
int read BMP(const char * nombre de archivo SZ)
{
Archivo * archivo;
WORD bfh[7];
long dpixeladd
if(NULL = =(archivo = fopen(nombre de archivo SZ, " rb)))
{
Devuelve 0;
}
printf("%s\n ", nombre de archivo SZ);
fred(& ampbfh, tamaño de(WORD), 7, archivo);
if (bfh[0]!=(PALABRA)(((PALABRA)' B ')|(' M ' & lt;& lt8)))
{
fclose (archivo);
Devuelve 0;
}
fred(& ampbih, sizeof(BITMAPINFOHEADER), 1, archivo);
p>if(BIH . bibitcount & lt; 24)
{
fclose(archivo);
Devuelve 0;
}
dpixeladd = BIH . bibitcount/8;
ancho de byte de línea = BIH . bi ancho *(dpixeladd); ! = 0)
ancho de byte de línea+= 4-(ancho de byte de línea % 4);
if((Buffer =(BYTE *)malloc(sizeof(BYTE)* BYTE de línea ancho * BIH alto))! = vacío)
{
fread(Buffer, ancho de bytes de línea * BIH. BIH alto, 1, archivo);
fclose(archivo);
Devuelve 1;
}
fclose(archivo);
Devuelve 0;
p>
}
int GetDIBColor(int X, int Y, BYTE *r, BYTE *g, BYTE *b)
{
int dpixeladd
BYTE * ptr
if(X & lt; 0 | | X & gt= bih.biWidth | | Y & lt0 | | Y & gt= bih. biHeight)
{
Devuelve 0;
}
dpixeladd = BIH . ptr = Buffer +X * dpixeladd+(BIH . BIH height-1-Y)* ancho de byte de línea;
* b = * ptr
* g = *(ptr+1) ;
p>
* r = *(ptr+2);
Devuelve 1;
}