二进制图片转换成BMP位图(C++)
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++)相关推荐
- 将HBITMAP转换成BMP位图文件的各个部分,可以在1BIT,4BIT,8BIT,16BIT,24BIT,32BIT之间转换
VC将HBITMAP转换成BMP位图文件的各个部分,可以在1BIT,4BIT,8BIT,16BIT,24BIT,32BIT之间转换 http://blog.ednchina.com/wxleasyla ...
- 怎么把图片转换成BMP格式
1.选择要进行格式的图片,双击,进入[Windows照片查看器]2.点击[打开]选项,选择[画图],进入图片编辑窗口3.点击[选择],再在图片上选择要裁剪的区域,再点击[裁剪] 4.裁剪后,如果图片不 ...
- 如何将JPG格式图片转换成BMP格式
从Win7的开始菜单里打开系统自带的"画图"工具 在画图工具里打开我们需要转换的图片:首先单击如图所示的白色倒三角符号,然后在出现的菜单里单击"打开",然后选择 ...
- 【学习笔记】简易的24位BMP图片转换成灰度图片
简易的24位BMP图片转换成灰度图片的C语言实现 使用C语言实现的一个简易的24位BMP图片转换成灰度图片的程序.需要先准备一张24位的BMP图片. 说明 RGB图片转换成灰度图片主要是使用这个公式: ...
- C#将image中的显示的图片转换成二进制
原文:C#将image中的显示的图片转换成二进制 1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才 ...
- php 图片单位转换,php如何把图片转换成二进制字符串
php把图片转换成二进制字符串的方法:首先通过"$_FILES['file']['tmp_name'];"方法获取临时文件名:然后通过base64EncodeImage函数将图片文 ...
- 转 把GIF图片转换成单个连续的图片 转 tif 等任意多帧图片转换bmp 或者gif等格式...
为什么80%的码农都做不了架构师?>>> 转 把GIF图片转换成单个连续的图片 转 tif 等任意多帧图片转换bmp 或者gif等格式 using System; using ...
- 把图片转换成二进制--把二进制转换成图片
把图片转换成二进制--把二进制转换成图片 private void button1_Click(object sender, EventArgs e) { st ...
- Java将图片转换成二进制,将二进制转换成图片
Java将图片转换成二进制,将二进制转换成图片 static BASE64Encoder encoder = new sun.misc.BASE64Encoder();static BASE64Dec ...
最新文章
- 反正我不信!马斯克谈元宇宙:没人愿意把屏幕贴脸上
- 【考研保研直通车】C9高校考研真题
- map初始化_您可曾这样初始化一个map呢?
- TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制
- 关于Linux路由表的route命令
- figma下载_不用担心Figma中的间距
- NPOI 删除指定的行
- java中统计括号配对_括号配对问题(C语言或JAVA语言代码)
- 大厂也在用的6种数据脱敏方案,醍醐灌顶!
- 肉体之爱的解释圣经_可以解释的AI简介,以及我们为什么需要它
- mvc可以运行在linux下吗,asp.netmvc部署到linux(centos)
- 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)
- InnoDB存储引擎介绍-(7) Innodb数据页结构
- 2021华为软挑赛复盘
- 光栅透过率计算 (Matlab)
- Windowsxp系统无法安装新字体
- 我的第一篇CSDN博客
- CSS盒子坍塌(高度坍塌)(以及解决办法)
- 图片文字识别软件哪个比较好
- android新版本怎么下载安装,android 新版本下载 安装
热门文章
- python小玩意——打开摄像头并截图
- JS验证邮箱合理性(初级版)
- C#开发测量程序-计算坐标方位角
- Mybatis-Plus配置和使用
- 玩客云刷linuxARMBIAN当服务器过程记录
- 有机化学反应里php什么意思,有机反应类型解读
- 微软服务器系统2018,升级微软2018 Windows10 四月正式版17134(1803)系统的多种方法...
- html显示fps,Three.js - 使用stats.js库显示帧数(以及画面渲染时间)
- c语言实训报告心得100字,c语言实训报告心得.doc
- 判断两条线段是否相交 java_判断两个线段是否相交02