bmp文件源码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#ifndef WIN32
#define BI_RGB        0L
#pragma pack(1)
typedef struct tagBITMAPINFOHEADER{
	unsigned long       biSize;
	long         		biWidth;
	long         		biHeight;
	unsigned short      biPlanes;
	unsigned short      biBitCount;
	unsigned long       biCompression;
	unsigned long       biSizeImage;
	long         		biXPelsPerMeter;
	long         		biYPelsPerMeter;
	unsigned long       biClrUsed;
	unsigned long       biClrImportant;
} BITMAPINFOHEADER;//, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

typedef struct tagBITMAPFILEHEADER {
	unsigned short  bfType;
	unsigned long   bfSize;
	unsigned short  bfReserved1;
	unsigned short  bfReserved2;
	unsigned long   bfOffBits;
} BITMAPFILEHEADER;//, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
#pragma pack()
#endif

#define WIDTH 800
#define HEIGHT 600

int main()
{
	BITMAPINFOHEADER bmih;
	BITMAPFILEHEADER bmfh;
	char cData[WIDTH * HEIGHT * 3];
	
	FILE *pf;

	int i;
	int j;
	int k = 0;

	srand((unsigned int)time(0));

	bmih.biSize = sizeof(BITMAPINFOHEADER);
	bmih.biWidth = WIDTH;
	bmih.biHeight = HEIGHT;
	bmih.biPlanes = 1;
	bmih.biBitCount = 24;
	bmih.biCompression = BI_RGB;
	bmih.biSizeImage = bmih.biWidth * bmih.biHeight * 3;
	bmih.biXPelsPerMeter = 0;
	bmih.biYPelsPerMeter = 0;
	bmih.biClrUsed = 0;
	bmih.biClrImportant = 0;

	bmfh.bfType = 0x4d42;
	bmfh.bfSize = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER) + bmih.biSizeImage;
	bmfh.bfReserved1 = 0;
	bmfh.bfReserved2 = 0;
	bmfh.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);

	for(i = 0; i < HEIGHT; ++i){
		for(j = 0; j < WIDTH; ++j){
			cData[k++] = (char)(rand() % 255);
			cData[k++] = (char)(rand() % 255);
			cData[k++] = (char)(rand() % 255);
		}
	}

	pf = fopen("bitmap.bmp", "wb");
	if(!pf){
		printf("open file failed\n");
		return -1;
	}

	fwrite((const char *)&bmfh, sizeof(BITMAPFILEHEADER), 1, pf);
	fwrite((const char *)&bmih, sizeof(BITMAPINFOHEADER), 1, pf);
	fwrite((const char *)cData, sizeof(cData), 1, pf);

	fclose(pf);

	return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值