Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo determinar si bmp (escala de grises) está en blanco según la proporción de blanco y negro?

¿Cómo determinar si bmp (escala de grises) está en blanco según la proporción de blanco y negro?

Supongamos que su imagen está almacenada en la siguiente estructura:

LPBITMAPINFO bmi

LPBYTE pBits

En cuanto a cómo almacenarla en esta estructura, puede consultar el siguiente código (pero este código no es la clave para resolver su problema):

BOOL CBmp::Read(CString file name)

{

CFile file;

BITMAPFILEHEADER bmfh

//Abrir archivo

if (! file. open(nombre de archivo, CFile::modeRead))

{

AfxMessageBox("¡El archivo no se puede abrir!");

Devolver FALSE

}

//Leer encabezado del archivo

documento. read((LPVOID)&bmfh,sizeof(bmfh));

if(bmfh.bfType!= 0x4d42)

{

AfxMessageBox("Esto no es un bmp archivo ");

Devolver FALSO

}

Si (índice de masa corporal)

{

Eliminar bmi

bmi = NULL

}

if(pbit)

{

Eliminar pBits

pBits = NULL

}

//Leer encabezado y paleta del mapa de bits

int infoSize = bmfh bfoff bits- sizeof(bmfh). ;

bmi = (LPBITMAPINFO) nuevos bytes [infoSize];

Archivo. read((LPVOID)bmi, infoSize);

if (BMI- gt;bmiHeader.biBitCount!=1. ampBMI- gt;bmiHeader.biBitCount!=4

amp ampBMI- gt;bmiHeader.biBitCount! = 8 ampBMI- gt;bmiHeader.biBitCount! =24)

{

AfxMessageBox("¡Número de color no válido!");

Devolver FALSO

}

//Leer datos de la imagen

pBits = nuevos bytes [BMI- gt;encabezado BMI imagen]

Archivo.

Read((LPVOID)pBits,BMI-gt;BMI header . bisize image);

Devuelve TRUE

}

Tu pregunta se puede resolver de la siguiente manera Función check() para juzgar:

int GetBytesPerLine() constante

{

Devuelve BMI- gt;BMI encabezado imagen bisize/BMI- gt;BMI. encabezado BIH;

}

Comprobación booleana()

{

if(pBits[0]!=0 | | pBits[0]! =255)

Devuelve falso

int BytePosition

if(pBits[0] == 0)

for(int I = 0;i ltBMI- gt;encabezado BMI. Altura BIH; i )

{

for(int j = 0;j ltnew BMI- gt;encabezado IMC .bi width; j)

{

posición del byte = I * GetBytesPerLine() j;

if(pBits[BytePosition]!= 0 )

Devuelve falso

}

}

Otros

for(int I = 0; I ltIMC- gt; encabezado IMC . altura BIH; i )

{

for(int j = 0; j ltnew BMI- gt; encabezado BMI. bi ancho; j)

{

posición del byte = I * GetBytesPerLine() j;

if(pBits[BytePosition]!= 255)

Devuelve falso

}

}

Devuelve verdadero

}