24位和8位BMP图片保存纯C代码
BMP图片大家都知道,可以通过查看BMP图片结构使用纯C就可以打开,编辑,处理,保存图片。非常方便使用。
具体BMP结构可以参考:wingdi.h头文件。今天主要在进行删减代码,需要把多余的代码删除,之前写的保存bmp代码就此贴在这里留着以后需要的时候使用:
8位BMP图片保存代码:
BOOL SaveMatrixToGrayBmp(char* sBMPFile, //name of BMP file
BYTE *pMatrix, // pointer to Matrix Bits array
int bmpWidth ,
int bmpHeight // width and height of the bmp
)
{
FILE* fp;
int bytesofScanLine,i,j; DWORD dwFileSize;
BITMAPFILEHEADER bmfHeader;
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[];
BYTE tempb=; fp = fopen(sBMPFile, "wb");
bytesofScanLine=(bmpWidth % ==) ? bmpWidth: ((bmpWidth+)/*);
dwFileSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*+bytesofScanLine*bmpHeight; bmfHeader.bfType=((WORD) ('M' << ) | 'B');
bmfHeader.bfSize=dwFileSize;
bmfHeader.bfReserved1=;
bmfHeader.bfReserved2=;
bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*; fwrite(&bmfHeader,sizeof(bmfHeader), , fp); // fill the bmp file Infomation Header.
bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmiHeader.biWidth=bmpWidth;
bmiHeader.biHeight=bmpHeight;
bmiHeader.biPlanes=;
bmiHeader.biBitCount=;
bmiHeader.biCompression=BI_RGB;
bmiHeader.biSizeImage=;
bmiHeader.biXPelsPerMeter=;
bmiHeader.biYPelsPerMeter=;
bmiHeader.biClrUsed=;
bmiHeader.biClrImportant=; fwrite(&bmiHeader,sizeof(bmiHeader), , fp); // fill the color tables.
for (i=; i< ; i++)
{
bmiColors[i].rgbBlue=(BYTE)(i);
bmiColors[i].rgbGreen=(BYTE)(i);
bmiColors[i].rgbRed=(BYTE)(i);
bmiColors[i].rgbReserved=;
} fwrite(&(bmiColors[]),sizeof(RGBQUAD)*, , fp); // fill the BMP data to file
for (j=bmpHeight- ; j>= ; j--)
{
fwrite((pMatrix+(j*bmpWidth)), , bmpWidth, fp);
for (i=; i<(bytesofScanLine-bmpWidth) ; i++)
fwrite(&tempb, , , fp);
} fclose(fp);
return true;
}
24位BMP图片保存代码:
BOOL SaveRGBMatrixToColorBmp(char* sBMPFile, //name of BMP file
BYTE *pRGBMat, // pointer to DIB bits array
int bmpWidth ,//width of the bmp
int bmpHeight // height of the bmp
)
{
// create the empty 24bit color BMP file
FILE* fp;
fp = fopen(sBMPFile, "wb");
DWORD dwFileSize;
BITMAPFILEHEADER bmfHeader;
BITMAPINFOHEADER bmiHeader; int bytesofScanLine,i,j;
bytesofScanLine=((bmpWidth*) % ==) ? (bmpWidth*): (*int(bmpWidth*/)+) ;
dwFileSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+bytesofScanLine*fabs((double)bmpHeight); // fill the bmp file Header;
bmfHeader.bfType=((WORD) ('M' << ) | 'B');
bmfHeader.bfSize=dwFileSize;
bmfHeader.bfReserved1=;
bmfHeader.bfReserved2=;
bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
fwrite(&bmfHeader,sizeof(bmfHeader), , fp); // fill the bmp file Infomation Header.
bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmiHeader.biWidth=bmpWidth;
bmiHeader.biHeight= fabs((double)bmpHeight);
bmiHeader.biPlanes=;
bmiHeader.biBitCount=;
bmiHeader.biCompression=BI_RGB;
bmiHeader.biSizeImage=;
bmiHeader.biXPelsPerMeter=;
bmiHeader.biYPelsPerMeter=;
bmiHeader.biClrUsed=;
bmiHeader.biClrImportant=;
fwrite(&bmiHeader,sizeof(bmiHeader), , fp); // fill the BMP data to file
BYTE dummy = ;
BYTE tempb=;
for (j=fabs((double)bmpHeight)-; j>= ; j--)
{
fwrite((pRGBMat+j**bmpWidth), bmpWidth*, , fp);
if (bmpWidth* != bytesofScanLine)
{
for (i = ; i<bytesofScanLine - bmpWidth*; i++)
fwrite(&dummy, , , fp);
} }
fclose(fp);
return true;
}
使用例子:
SaveMatrixToGrayBmp("./mid/Gray.bmp", Gray, iWidth, iHeight)
SaveRGBMatrixToColorBmp("./mid/Img.bmp", Img, iWidth, iHeight)
24位和8位BMP图片保存纯C代码的更多相关文章
- Android系统移植与调试之------->如何使用PhotoShop转换24位的bmp图片为16位bmp图片
使用Android移植时候,很多图片都需要16为的bmp格式,所以研究了一下如何从24位转换成16位,供大家参阅 step1:查看bmp图片的属性,如下图所示,是24位的 step2:用PhotoSh ...
- C#图片灰度处理(位深度24→位深度8)、C#图片二值化处理(位深度8→位深度1)
C#图片灰度处理(位深度24→位深度8) #region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> / ...
- Photoshop做32位带Alpha通道的bmp图片
原文链接: http://blog.sina.com.cn/s/blog_65c0cae801016e5u.html 批量制作32位带Alpha通道的bmp图片,可以制作一个动作,内容可以如下: ...
- 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片
本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...
- Windows 保存BMP图片
在Windows下保存BMP图片还是挺方便的,直接上代码,拷贝就能用 void savebmp(uchar * pdata, char * bmp_file, int width, int heigh ...
- 图像转置的SSE优化(支持8位、24位、32位),提速4-6倍。
一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...
- SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍
一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...
- [转]RGB数据保存为BMP图片
转自:http://blog.csdn.net/yixianfeng41/article/details/52591585 一.BMP文件由文件头.位图信息头.颜色信息和图形数据四部分组成. 1.BM ...
随机推荐
- Study notes for Sparse Coding
Sparse Coding Sparse coding is a class of unsupervised methods for learning sets of over-complete ba ...
- 数据结构读书笔记(三)(C语言)
栈 顺序实现: 存储结构: #define STACK_INIT_SIZE 10 // 存储空间初始分配量 #define STACK_INCREMENT 2 // 存储空间分配增量 struct S ...
- jqGrid笔记@简单实现
jqGrid在MVC中的版本是已经通过 HtmlHelper 的扩展方法封装后的产物,webForm版本貌似也将其封装成了服务器端空间,所以我推荐下载原生的jqGrid版本的地址为:http://ww ...
- MVC客户端验证的小示例
MVC客户端验证的小示例 配置客户端验证的可用性: <configuration> <appSettings> <add key="ClientValidat ...
- Blog 转移
Blog 转移至 http://blog.rapcoder.com CSDN : http://blog.csdn.net/a542551042 欢迎一起交流 学习 ,谢谢!!!
- Delphi控件下载网
http://delphi-z.ru/index.php http://developer.team/delphi/
- Swift - 单例模式的实现
过去Swift要实现单例,无非是这三种方式:全局变量,内部变量和dispatch_once方式.但都略显繁琐. 后来从1.2版本起,Swift中添加了如 static let 和 static var ...
- vim: vim快捷键
0. 搜索字符串: 精确匹配查找单词 如果你输入 "/the",你也可能找到 "there". 要找到以 "the" 结尾的单词,可以用:/ ...
- Axure基础系列教程
Axure rp 6.5的软件安装.汉化与注册 认识Axure的软件界面 生成网页原型的三种方法 如何关闭IE浏览器在生成原型时候的安全警告 在chrome中使用axure生成原型的问题 站点地图 ...
- Swift - 通过url地址打开web页面
通过UIApplication.sharedApplication().openURL()方法,可以使用浏览器打开相应的网页. 1 2 3 var urlString = "http://h ...