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代码的更多相关文章

  1. Android系统移植与调试之------->如何使用PhotoShop转换24位的bmp图片为16位bmp图片

    使用Android移植时候,很多图片都需要16为的bmp格式,所以研究了一下如何从24位转换成16位,供大家参阅 step1:查看bmp图片的属性,如下图所示,是24位的 step2:用PhotoSh ...

  2. C#图片灰度处理(位深度24→位深度8)、C#图片二值化处理(位深度8→位深度1)

    C#图片灰度处理(位深度24→位深度8) #region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> / ...

  3. Photoshop做32位带Alpha通道的bmp图片

    原文链接: http://blog.sina.com.cn/s/blog_65c0cae801016e5u.html   批量制作32位带Alpha通道的bmp图片,可以制作一个动作,内容可以如下: ...

  4. 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片

    本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...

  5. Windows 保存BMP图片

    在Windows下保存BMP图片还是挺方便的,直接上代码,拷贝就能用 void savebmp(uchar * pdata, char * bmp_file, int width, int heigh ...

  6. 图像转置的SSE优化(支持8位、24位、32位),提速4-6倍。

    一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...

  7. SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍

    一.前言 转置操作在很多算法上都有着广泛的应用,在数学上矩阵转置更有着特殊的意义.而在图像处理上,如果说图像数据本身的转置,除了显示外,本身并无特殊含义,但是在某些情况下,确能有效的提高算法效率,比如 ...

  8. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码

    ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...

  9. [转]RGB数据保存为BMP图片

    转自:http://blog.csdn.net/yixianfeng41/article/details/52591585 一.BMP文件由文件头.位图信息头.颜色信息和图形数据四部分组成. 1.BM ...

随机推荐

  1. bzoj 1020-1029

    1020 SHOI2008 安全的航线flight 这题的代码写了很久,主要是因为几何题的东西都忘得差不多了.除去写代码的2个小时,今晚又调了一晚上,终于AC了. 这题的做法还是很有参考价值的. 最简 ...

  2. codeforces 316F3 Suns and Rays

    题目在此 找出中有多少个太阳以及每个太阳的散发线段. 算法 原图: 将图"缩小",如果一个白点的四周有黑点,那么把这个白点变成黑点: 将图"放大",即上述&qu ...

  3. What’s new in Spark 1.2.0

    What's new in Spark 1.2.0 1.2.0 was released on 12/18, 2014 在2014年5月30日公布了Spark 1.0 和9月11日公布了Spark1. ...

  4. jQuery操作checkbox的问题

    问题: 使用 jquery 的 attr('checked',false) 和 attr('checked',true) 方法给 checkbox 设置选中和未选中状态时,失效. 原因: jquery ...

  5. 使用ExifInterface获取图片信息

    package com.example.readimage; import java.io.IOException; import android.media.ExifInterface; impor ...

  6. 动态绑定Gridview带模板列

    公司要做一个可以支持4种数据库(<!--数据库类型 (DLL专用) (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)-->)的并且字段随表字段变化的可 ...

  7. perl学习(8) 控制:unless,until,next,redo,last

    Perl中实现了所有C 的操作符! Perl力求代码最少! 1.1.unless unless的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_] ...

  8. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  9. File Templates for web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)

    As I sometimes need these, I have compiled a list of the valid headers of the web.xml and web-fragme ...

  10. Linux/ubuntu下的boost库安装

    我一直都没有写博客的习惯,最近正好在研究linux下的开发(目前也只是粗粗的研究),且用到了boost库,就乘此机会写点什么,最起码记录一下我在安装boost的一些步骤,主要给和我一样的linux开发 ...