void saveBitmap()

{

//一个586*586的二进制图片

const int height = 586;
const int width = 586;

//新生产bmp图片数据块总大小  (bmpWidth *biBitCount/8+3)/4*4*bmpHeight;
const int size = 588 *586 ;

// Part.1 Create Bitmap File Header  
BITMAPFILEHEADER fileHeader;

fileHeader.bfType = 0x4D42;  
fileHeader.bfReserved1 = 0;  
fileHeader.bfReserved2 = 0;

fileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + size + 256 * sizeof(RGBQUAD);  
fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);

// Part.2 Create Bitmap Info Header  
BITMAPINFOHEADER bitmapHeader = { 0 };

bitmapHeader.biSize = sizeof(BITMAPINFOHEADER);  
bitmapHeader.biHeight = height;  
bitmapHeader.biWidth = width;  
bitmapHeader.biPlanes = 1;  
bitmapHeader.biBitCount =8;
bitmapHeader.biSizeImage = 0;  
bitmapHeader.biXPelsPerMeter = 0;
bitmapHeader.biYPelsPerMeter = 0;
bitmapHeader.biClrUsed = 256;
bitmapHeader.biClrImportant = 0;
bitmapHeader.biCompression = 0;

int pad;
int biWidth = 0;
int padWidth = 0 ;

if(bitmapHeader.biBitCount==24)
pad = 4 - ((bitmapHeader.biWidth * 3) % 4);
else
pad = 4 - ((bitmapHeader.biWidth) % 4);
if (pad == 4)      
pad = 0;           
padWidth = bitmapHeader.biWidth + pad;

RGBQUAD* pRgbQuards=new RGBQUAD[256]; 
for(int i=0;i<256;i++) 

pRgbQuards[i].rgbBlue=i; 
pRgbQuards[i].rgbRed=i; 
pRgbQuards[i].rgbGreen=i; 
}

int filesize = files.size();
for (int i= 0;i <filesize; i++)
{
FILE *imgp;
string filename = files[i];
fopen_s(&imgp,filename.data(),"rb");

if (imgp == NULL)
{
return ;
}
BYTE *bits = (BYTE *)malloc(586*586);
BYTE *bits0 = (BYTE *)malloc(1); 
BYTE *bits1 = (BYTE *)malloc(1); 
BYTE *bits2 = (BYTE *)malloc(1); 
BYTE *bits3 = (BYTE *)malloc(586*586);

for (int j = 0; j<586*586;j++)
{
memset(bits1, 0xFF, 1); 
memset(bits2, 0xFF, 1); 
fread(bits1,sizeof(char),1,imgp);
fread(bits2,sizeof(char),1,imgp);
bits3[j] = (((*bits1)<<6)| ((*bits2 )>>2));

fclose(imgp);

string Bmpfilename = filename.substr(0,filename.length()- 3) + "bmp";

FILE *output = fopen(Bmpfilename.data(), "wb");  
if (output == NULL)  
{  
printf("Cannot open file!\n");  
}  
else  
{  
fwrite(&fileHeader,1,sizeof(BITMAPFILEHEADER),output);  
fwrite(&bitmapHeader,1,sizeof(BITMAPINFOHEADER),output);  
fwrite(pRgbQuards,sizeof(RGBQUAD),256,output); 
//fwrite(outbfr,sizeof(BYTE),586*586,output);
char *by = "0x00"; 
for (int n= 586; n >0 ; n--)
{
for (int m = 0;m < 586; m++)
{
bits0[0] =bits3[(n-1)*586 +m];
fwrite(bits0,sizeof(BYTE),1,output);
}
for(int i = 1; i <= pad; i++)
{
fwrite(by,sizeof(BYTE),1,output);
}
}
}
fclose(output);
free(bits); 
free(bits0); 
free(bits1); 
free(bits2); 
free(bits3); 
bits = NULL;
bits0= NULL;
bits1 = NULL;
bits2 = NULL;
bits3 = NULL;

string Pngfilename = filename.substr(0,filename.length()- 3) + "png";

LPCWSTR  Bmpname = stringToLPCWSTR(Bmpfilename);
LPCWSTR  Pngname = stringToLPCWSTR(Pngfilename);

//将BMP图片转换成PNG图片  详见下一篇博文
BMptoPNG(Bmpname,Pngname);  
DeleteFile(Bmpname);
}
}

二进制图片转换成BMP位图(C++)相关推荐

  1. 将HBITMAP转换成BMP位图文件的各个部分,可以在1BIT,4BIT,8BIT,16BIT,24BIT,32BIT之间转换

    VC将HBITMAP转换成BMP位图文件的各个部分,可以在1BIT,4BIT,8BIT,16BIT,24BIT,32BIT之间转换 http://blog.ednchina.com/wxleasyla ...

  2. 怎么把图片转换成BMP格式

    1.选择要进行格式的图片,双击,进入[Windows照片查看器]2.点击[打开]选项,选择[画图],进入图片编辑窗口3.点击[选择],再在图片上选择要裁剪的区域,再点击[裁剪] 4.裁剪后,如果图片不 ...

  3. 如何将JPG格式图片转换成BMP格式

    从Win7的开始菜单里打开系统自带的"画图"工具 在画图工具里打开我们需要转换的图片:首先单击如图所示的白色倒三角符号,然后在出现的菜单里单击"打开",然后选择 ...

  4. 【学习笔记】简易的24位BMP图片转换成灰度图片

    简易的24位BMP图片转换成灰度图片的C语言实现 使用C语言实现的一个简易的24位BMP图片转换成灰度图片的程序.需要先准备一张24位的BMP图片. 说明 RGB图片转换成灰度图片主要是使用这个公式: ...

  5. C#将image中的显示的图片转换成二进制

    原文:C#将image中的显示的图片转换成二进制 1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才 ...

  6. php 图片单位转换,php如何把图片转换成二进制字符串

    php把图片转换成二进制字符串的方法:首先通过"$_FILES['file']['tmp_name'];"方法获取临时文件名:然后通过base64EncodeImage函数将图片文 ...

  7. 转 把GIF图片转换成单个连续的图片 转 tif 等任意多帧图片转换bmp 或者gif等格式...

    为什么80%的码农都做不了架构师?>>>    转 把GIF图片转换成单个连续的图片 转 tif 等任意多帧图片转换bmp 或者gif等格式 using System; using ...

  8. 把图片转换成二进制--把二进制转换成图片

    把图片转换成二进制--把二进制转换成图片 private void button1_Click(object sender, EventArgs e)         {             st ...

  9. Java将图片转换成二进制,将二进制转换成图片

    Java将图片转换成二进制,将二进制转换成图片 static BASE64Encoder encoder = new sun.misc.BASE64Encoder();static BASE64Dec ...

最新文章

  1. 反正我不信!马斯克谈元宇宙:没人愿意把屏幕贴脸上
  2. 【考研保研直通车】C9高校考研真题
  3. map初始化_您可曾这样初始化一个map呢?
  4. TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制
  5. 关于Linux路由表的route命令
  6. figma下载_不用担心Figma中的间距
  7. NPOI 删除指定的行
  8. java中统计括号配对_括号配对问题(C语言或JAVA语言代码)
  9. 大厂也在用的6种数据脱敏方案,醍醐灌顶!
  10. 肉体之爱的解释圣经_可以解释的AI简介,以及我们为什么需要它
  11. mvc可以运行在linux下吗,asp.netmvc部署到linux(centos)
  12. 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)
  13. InnoDB存储引擎介绍-(7) Innodb数据页结构
  14. 2021华为软挑赛复盘
  15. 光栅透过率计算 (Matlab)
  16. Windowsxp系统无法安装新字体
  17. 我的第一篇CSDN博客
  18. CSS盒子坍塌(高度坍塌)(以及解决办法)
  19. 图片文字识别软件哪个比较好
  20. android新版本怎么下载安装,android 新版本下载 安装

热门文章

  1. python小玩意——打开摄像头并截图
  2. JS验证邮箱合理性(初级版)
  3. C#开发测量程序-计算坐标方位角
  4. Mybatis-Plus配置和使用
  5. 玩客云刷linuxARMBIAN当服务器过程记录
  6. 有机化学反应里php什么意思,有机反应类型解读
  7. 微软服务器系统2018,升级微软2018 Windows10 四月正式版17134(1803)系统的多种方法...
  8. html显示fps,Three.js - 使用stats.js库显示帧数(以及画面渲染时间)
  9. c语言实训报告心得100字,c语言实训报告心得.doc
  10. 判断两条线段是否相交 java_判断两个线段是否相交02