从BMP图中读取RGB值并转化成YUV
BYTE *** rgb2yuv(const char *filename)
{
BYTE ***image;
FILE *file;
int i, j, k;
int biBitCount, offset;
int *x;
if (!(file=fopen(filename,"rb" )))
{
printf ("Cannot open file %s.\n" , filename);
return 0 ;
}
fread(&bmfhdr.bfType, sizeof (WORD), 1 , file);
fread(&bmfhdr.bfSize, sizeof (DWORD), 1 , file);
fread(&bmfhdr.bfReserved1, sizeof (WORD), 1 , file);
fread(&bmfhdr.bfReserved2, sizeof (WORD), 1 , file);
fread(&bmfhdr.bfOffBits, sizeof (DWORD), 1 , file);
fread(&bmihdr.biSize, sizeof (DWORD), 1 , file);
fread(&bmihdr.biWidth, sizeof (LONG), 1 , file);
fread(&bmihdr.biHeight, sizeof (LONG), 1 , file);
fread(&bmihdr.biPlanes, sizeof (WORD), 1 , file);
fread(&bmihdr.biBitCount, sizeof (WORD), 1 , file);
fread(&bmihdr.biCompression, sizeof (DWORD), 1 , file);
fread(&bmihdr.biSizeImage, sizeof (DWORD), 1 , file);
fread(&bmihdr.biXPelsPerMeter, sizeof (LONG), 1 , file);
fread(&bmihdr.biYPelsPerMeter, sizeof (LONG), 1 , file);
fread(&bmihdr.biClrUsed, sizeof (DWORD), 1 , file);
fread(&bmihdr.biClrImportant, sizeof (DWORD), 1 , file);
printf ("| biBitCount: %d\n" , bmihdr.biBitCount);
if (bmihdr.biBitCount == 1 ) {
RGBQUAD aColors[2 ];
for (i=0 ; i<2 ; i++) {
fread(&aColors[i].rgbBlue, sizeof (BYTE), 1 , file);
fread(&aColors[i].rgbGreen, sizeof (BYTE), 1 , file);
fread(&aColors[i].rgbRed, sizeof (BYTE), 1 , file);
fread(&aColors[i].rgbReserved, sizeof (BYTE), 1 , file);
printf ("| rgbBlue: %d\t rgbGreen: %d\t rgbRed: %d\t rgbReserved: %d\n" , aColors[i].rgbBlue, aColors[i].rgbGreen, aColors[i].rgbRed, aColors[i].rgbReserved);
}
} else if (bmihdr.biBitCount == 8 ) {
RGBQUAD aColors[256 ];
for (i=0 ; i<8 ; i++) {
fread(&aColors[i].rgbBlue, sizeof (BYTE), 1 , file);
fread(&aColors[i].rgbGreen, sizeof (BYTE), 1 , file);
fread(&aColors[i].rgbRed, sizeof (BYTE), 1 , file);
fread(&aColors[i].rgbReserved, sizeof (BYTE), 1 , file);
printf ("| rgbBlue: %d\t rgbGreen: %d\t rgbRed: %d\t rgbReserved: %d\n" , aColors[i].rgbBlue, aCo