Функция проверки сравнивает матрицу градаций серого исходного изображения с соответствующей распакованной. Он не показывает различий, но некоторые изображения хорошо распакованы, а некоторые нет.
Но я не думаю, что в заголовке произошла ошибка.
Они все соответствуют стандартным значениям.
Что вы подразумеваете под «Попробуйте сравнить файлы BMP» и «Изображения Zelda отличаются только в первых 1088 байтах, тогда как изображения сундуков отличаются только в первых 64 байтах»?
void restorebmp (int way)
{
struct tagBITMAPFILEHEADER bmfh;
struct tagBITMAPINFOHEADER bmih;
struct tagRGBQUAD rgb [256];
char outfile_name [MAXFILE + MAXEXT];
char ext [10];
int i, j;
char gray_bit;
ФАЙЛ * восстановить;
* * Для тысячи сорок-семь (I = 0; я
для (J = 0; J
{int temp = 0;
int bit [8];
для (bit_no = 7; bit_no> = 0; bit_no -)
{bit [bit_no] = * ((char ) bit_plane [bit_no] + i wid + j);
if (way! = 0 && bit_no <7) </p>
bit [bit_no] = bit [bit_no] ^ bit [bit_no + 1];
// convert them to decimal values to be saved to pict[i][j]
Температура + = бит [bit_no] * пау (2, bit_no);
}
пикт [I] [J] = темп; * +1069 *
}
// изменить значение серого
для (I = 0; я
* * Для тысячи семьдесят пять (J = 0; J
пикт [I] [J] = р1 [пикт [I] [J]]; * 1 077 *
unsigned char temp;
для (i = 0; i
для (j = 0; j
{
temp = pict [i] [j];
pict[i][j] = pict[hei-i-1][j];
pict[hei-i-1][j] = temp;
}
// Создать BITMAPFILEHEADER
bmfh.wType = 0x4d42;
bmfh.dwSize = wid * hei + 1078;
bmfh.wReserved1 = 0;
bmfh.wReserved2 = 0;
bmfh.dwOffBits = 0x0436;
// Создать BITMAPINFOHEADER
bmih.dwSize = 40;
bmih.dwWidth = wid;
bmih.dwHeight = hei;
bmih.wPlanes = 1;
bmih.wBitCount = 8;
bmih.dwCompression = 0;
bmih.dwSizeImage = hei * wid;
bmih.dwXPelsPerMeter = 0;
bmih.dwYPelsPerMeter = 0;
bmih.dwClrUsed = 0;
bmih.dwClrImportant = 0;
// Создать цветовую палитру
char tempc [256];
int count = 0;
для (я = 0; г <32; я ++) </p>
для (J = 0; J <8; j ++) </p>
* * +1137 {tempc [8 * I + J] = бит (J, интенсивность [I]);
if (tempc [8 * i + j] == 1)
{rgb [count] .bBlue = (знак без знака) (8 * i + j);
rgb[count].bGreen=(unsigned char)(8*i+j);
rgb[count].bRed=(unsigned char)(8*i+j);
rgb[count].bReserved=0;
кол ++;
}
}
, если (количество <256) </p>
для (I = Count; г <256; я ++) </p>
{rgb [i] .bBlue = 0;
rgb[i].bGreen=0;
rgb[i].bRed=0;
rgb[i].bReserved=0;
}
// Создать файл bmp
* +1161 * зЬгсру (outfile_name, orig_name); * * тысячу сто шестьдесят два
* +1163 * Sprintf (доб, "% d_gn.bmp", путь); * +1164 *
* +1165 * strcat (outfile_name, доб);
if ((restore = fopen (outfile_name, "wb")) == NULL)
{ printf ("Cannot create bmp file");
getch();
exit (1);
}
fwrite (& bmfh, sizeof (struct tagBITMAPFILEHEADER), 1, восстановление);
fwrite (& bmih, sizeof (struct tagBITMAPINFOHEADER), 1, восстановление);
для (i = 0; i <256; i ++) </p>
fwrite (& rgb [i], sizeof (struct tagRGBQUAD), 1, restore);
FSEEK (восстановление, 0x0436, SEEK_SET);
для (I = 0; я
* * 1 181 для (J = 0; J
fwrite(&pict[i][j],sizeof(pict[i][j]),1,restore);
fclose (восстановление);
cprintf ("Завершить восстановление bmp файла \ n \ r");
для (i = 0; i <8; i ++) </p>
free (bit_plane [i]);
для (i = 0; i <7; i ++) </p>
бесплатно (refer_plane [i]);
}