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. em换算px

    一般浏览器默认的1em=16px,所以常用字体大小如下: 10px=0.625em 12px=0.75em 14px=0.875em 16px=1em 18px=1.125em 20px=1.25em ...

  2. db2常用命令(详解)大全

    近一年来在项目开发中使用到了IBM的DB2 9.1的数据库产品,跟Oracle相比一些命令有很大的区别,而它最大的功能是支持      xml存储.检索机制,通过XPath进行解析操作,使开发人员免于 ...

  3. fileziller 恢复 站点管理器 内的ftp帐号方法

    由于系统坏了重装了系统,以前的fileziller中配置的服务器链接信息列表很多,新装fileziller后即使复制以前的安装目录过来,站点管理器内还是空荡荡的. 这些服务器链接的配置信息非常重要,如 ...

  4. Python 中的类的相关操作

    构造函数 构造函数是任何类都有的特殊方法.当要创建一个类时,就要调用构造函数.他的名字是__init__.init的前后分别是两个下划线.时间类Time的构造函数如下: >>> cl ...

  5. C# 验证识别基类

    原文C# 验证识别基类 网上找了些代码 自己又改了下 先放出来了 处理简单的验证码足够了 001 using System; 002 using System.Collections.Generic; ...

  6. 基于visual Studio2013解决面试题之0507字符串转整数

     题目

  7. HDU 3397 Sequence operation(线段树)

    HDU 3397 Sequence operation 题目链接 题意:给定一个01序列,有5种操作 0 a b [a.b]区间置为0 1 a b [a,b]区间置为1 2 a b [a,b]区间0变 ...

  8. ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题

    1.ubuntu 13.10 Rhythmbox不能播放mp3的解决方法 软件中心搜索(ubuntu额外的版权受限软件)不带括号 2.中文乱码问题解决方法: 终端顺序操作 : 1.  sudo ged ...

  9. 查找后去掉EditTextView的焦点

    //在按钮点击事件里处理 bt_search.setOnClickListener(new OnClickListener() { public void onClick(View v) {      ...

  10. 转换函数CONVERSION_EXIT_TSTRN_OUTPUT

    CONVERSION_EXIT_TSTRN_OUTPUT 在路线表TVRO中字段TDVZND 运输提前时间,取出来的数值没有转换,需要此函数进行转换.如14400,000  转换后为14,400:00 ...