生成一个空白BMP的简单代码【转】

转自:http://blog.chinaunix.net/uid-15063109-id-4275395.html

做图像处理时,有时需要临时生成图使用。以下是生成320x240 24位图的一个简单的代码实现:

#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)

void makebmp()
{
int nSize =abs(long(240 * WIDTHBYTES(24 * 320)));
char*  buff = new char[nSize];
memset(buff, 0, nSize);

BITMAPINFOHEADER header;
header.biSize = sizeof(BITMAPINFOHEADER);

header.biWidth = 320;
header.biHeight = 240*(-1);
header.biBitCount = 24;
header.biCompression = 0;
header.biSizeImage = 0;
header.biClrImportant = 0;
header.biClrUsed = 0;
header.biXPelsPerMeter = 0;
header.biYPelsPerMeter = 0;
header.biPlanes = 1;

//3 构造文件
BITMAPFILEHEADER bmpFileHeader;
HANDLE hFile = NULL;
DWORD dwTotalWriten = 0;
DWORD dwWriten;

bmpFileHeader.bfType = 0x4d42; //‘BM‘;
bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmpFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+ nSize;

FILE* pf = fopen("d:\\test.bmp", "wb");
fwrite(&bmpFileHeader, sizeof(BITMAPFILEHEADER), 1, pf);
fwrite(&header, sizeof(BITMAPINFOHEADER), 1, pf);
fwrite(buff, 1, nSize, pf);
fclose(pf);

delete buff;
}

唯一需要解释的就是这句:
#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)

这是为了保证32字节对齐。VC的头文件和DirectShow的文件都能找到定义。

因为 memset(buff, 0, nSize);
所以生成的图是黑色的。
可以自己修改,按RGB三字节写上不同的值,看看图像有什么变化。
时间: 2024-11-09 00:21:02

生成一个空白BMP的简单代码【转】的相关文章

JS一行代码,生成一个随机颜色,简单粗暴。

var r = '#'+ Math.random().toString(16).substr(-6); Dont believe, just try. Math.random().toString(16) 随机生成一个随机数,然后转为16进制字符串,截取后6位,now 就是随机颜色的后6位了. 原文地址:https://www.cnblogs.com/hill-foryou/p/8954452.html

使用itext7简单的生成一个pdf,创建一个pdf模板并进行填充

下面这段代码,是显示中文字体的关键代码.如果之前学习使用itext 2*,5*和itextasian.jar.的,为了让这段代码生效一定都遇到Font 'STSongStd-Light' with 'UniGB-UCS2-H' is not recognized这个异常,查了很多资料,也试过很多方法. itext7 内置对中文(CJK字体)进行了支持,不在依赖其他组件.完美解决上述的异常. PdfFont font = PdfFontFactory.createFont("STSongStd-L

Bitmap文件格式+生成一个BMP文件

Bitmap的文件格式: 1 #define UINT16 unsigned short 2 #define DWORD unsigned int 3 #define WORD short 4 #define LONG int 5 6 // Bitmap File Header ( 14 Bytes ) 7 typedef struct tagBITMAPFILEHEADER 8 { 9 UINT16 bfType; // same as BM in ASCII. 10 DWORD bfSize

【代码笔记】通过颜色来生成一个纯色图片

一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)]; imageView.backgroundColor=[UIColo

jQuery生成一个DIV容器,ID是"rating".

我们需要一些服务器端代码,这个例子中用到了一个PHP文件,读取rating参数然后返回rating总数和平均数.看一下rate.php代码.虽然这些例子也可以不使用AJAX来实现,但显示我们不会那么做,我们用jQuery生成一个DIV容器,ID是"rating". $(document).ready(function() {        // generate markup        var ratingMarkup = ["lease rate: "]; 

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

js对Date对象的操作的问题(生成一个倒数7天的数组)

今天在论坛上看到这样一个问题如下: 问题描述: 使用JavaScript生成一个倒数7天的数组.比如今天是10月1号,生成的数组是["9月25号","9月26号","9月27号","9月28号","9月29号","9月30号","10月1号"].这个难点就是需要判断这个月份(可能还需要上一个月份)是30天还是31天,而且还有瑞年的2月28天或者29天. 解答思路: 不

摆脱任何工具-简单代码让文件夹加密

电脑中或多或少的有很多敏感信息,尤其是大数据时代,信息一旦泄漏对我们造成的损失将会很大.有时候别人借用我们的电脑,有些信息不想让别人看到怎么办?有人会说有隐藏选项,但是,一旦开启显示隐藏文件,隐藏的文件夹又会暴露在视野里,那些用软件加密的软件又太复杂.下面的一段代码将让我们进行文件夹的加密. 加密手段实际上并不复杂,首先将加密文件夹改名成特殊名称:Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D},然后将其属性改为隐藏+系统,加入判断语句则是

把C#程序(含多个Dll)合并成一个Exe的超简单方法

原文:把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Costura.Fody的工具.Costura.Fody是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件