void restorebmp(int方式)
{
结构标签BITMAPFILEHEADER bmfh;
结构标签BITMAPINFOHEADER bmih;
结构标签RGBQUAD RGB [256];
char outfile_name[MAXFILE+MAXEXT];
字符分机[10];
整数 i, j;
char gray_bit;
文件*恢复;
对于(我=0;我
对于(j=0;j
{ int temp=0;
整数位[8];
for (bit_no = 7; bit_no >= 0; bit_no--)
{ bit[bit_no]=*((char )bit_plane[bit_no]+i wid+j);
如果(方式!= 0 && bit_no<7)
位[bit_no] = 位[bit_no]^bit[bit_no + 1];
// convert them to decimal values to be saved to pict[i][j]
temp+=bit[bit_no]*pow(2,bit_no);
}
pict[i][j]=温度;
}
// 改变灰度值
对于(我=0;我
对于(j=0;j
pict[i][j]=p1[pict[i][j]];
无符号字符温度;
对于 (i = 0; i < hei/2; i++)
对于 (j = 0; j < wid; j++)
{
温度 = 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 = 宽度;
bmih.dwHeight = hei;
bmih.wPlanes = 1;
bmih.wBitCount = 8;
bmih.dw压缩 = 0;
bmih.dwSizeImage = hei*wid;
bmih.dwXPelsPerMeter = 0;
bmih.dwYPelsPerMeter = 0;
bmih.dwClrUsed = 0;
bmih.dwClrImportant = 0;
// 创建调色板
字符温度 [256];
整数计数=0;
对于(i=0;i<32;i++)
对于(j=0;j<8;j++)
{tempc[8*i+j]=bit(j,intensity[i]);
if (tempc[8*i+j]==1)
{ rgb[count].bBlue=(unsigned char)(8*i+j);
rgb[count].bGreen=(unsigned char)(8*i+j);
rgb[count].bRed=(unsigned char)(8*i+j);
rgb[count].bReserved=0;
计数++;
}
}
如果(计数<256)
for(i=count;i<256;i++)
{ rgb[i].bBlue=0;
rgb[i].bGreen=0;
rgb[i].bRed=0;
rgb[i].bReserved=0;
}
//创建bmp文件
strcpy(outfile_name,orig_name);
sprintf(ext,"%d_gn.bmp",way);
strcat(outfile_name,ext);
if ( (restore = fopen (outfile_name, "wb")) == NULL )
{ printf ("Cannot create bmp file");
getch();
exit (1);
}
fwrite (&bmfh, sizeof(struct tagBITMAPFILEHEADER), 1, restore);
fwrite (&bmih, sizeof(struct tagBITMAPINFOHEADER), 1,restore);
对于 (i=0; i<256; i++)
fwrite (&rgb[i], sizeof(struct tagRGBQUAD), 1, restore);
fseek(恢复,0x0436,SEEK_SET);
对于(我=0;我
对于(j=0;j
fwrite(&pict[i][j],sizeof(pict[i][j]),1,restore);
fclose(恢复);
cprintf("完成恢复 bmp 文件\n\r");
对于(i=0;i<8;i++)
免费(位平面[i]);
对于(i=0;i<7;i++)
免费(参考平面[i]);
}