Red de conocimiento informático - Material del sitio web - ¿Cómo extraer el valor de color RGB de cualquier punto en una imagen determinada usando programación C++?

¿Cómo extraer el valor de color RGB de cualquier punto en una imagen determinada usando programación C++?

La consola lee el archivo de imagen BMP y genera los componentes de color de los puntos especificados.

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

}