读取Bitmap(设备无关位图)数据的经典C代码

最近为了测试C6678需要读取图像,考虑到效率问题,我用C语言写了一个读取Bitmap的子程序.

这个程序我之前写过,然后这里简单修改了一下以方便C6678在CCS上测试。

本文先简要介绍这段程序,具体测试请关注后续博文。

这段程序是通用的,可以在别处引用,具体代码如下。

头文件Bitmapper.h

/*
* Bitmapper.h
*
*  Created on: 2014年12月18日
*      Author: fengyhack
*/

#ifndef BITMAPPER_H
#define BITMAPPER_H

#include <stdio.h>
#include <stdlib.h>
//#include <memory.h>

#pragma warning(disable:4996)

typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef long LONG;
typedef int BOOL;

#define TRUE 1
#define FALSE 0

#ifndef NULL
#define NULL 0
#endif

#define BM_WORD 0x4D42


typedef struct tagBitmapHeader
{
	//WORD bfType; //Constant = 0x424D or “BM”
	DWORD bfSize;
	WORD bfReserved1;
	WORD bfReserved2;
	DWORD bfOffBits;
	
	DWORD biSize;
	LONG biWidth;
	LONG biHeight;
	WORD biPlanes; //Constant = 1
	WORD biBitCount;
	DWORD  biCompression;
	DWORD  biSizeImage;
	LONG  biXPelsPerMeter;
	LONG  biYPelsPerMeter;
	DWORD  biClrUsed;
	DWORD  biClrImportant;
}BITMAPHEADER;

typedef struct tagRGBQUAD
{
	BYTE rgbBlue;
	BYTE rgbGreen;
	BYTE rgbRed;
	BYTE rgbReserved;
}RGBQUAD;

typedef struct tagC3RGB
{
	BYTE red;
	BYTE green;
	BYTE blue;
}C3RGB;

typedef struct tagBufferDims
{
	int width;
	int height;
	int depth;
}BUFFERDIMS;

extern void printType(const int t);

extern void ShowBitmapInfo(BITMAPHEADER* pBitmapHeader);

extern BOOL OpenBitmapFile(const char* szFileName, FILE** ppFile);

extern BOOL ReadHeaderInfo(FILE* pFile, BITMAPHEADER* pBitmapHeader, BOOL dumpInfo);

extern BOOL ReadImageData(FILE* pFile, BITMAPHEADER* pBitmapHeader, BYTE** ppBuffer, BUFFERDIMS* pBufferDims);

extern BOOL ReadBitmapFile(const char* szFileName, BYTE** ppBuffer, BUFFERDIMS* pBufferDims, BOOL dumpInfo);

#endif


实现文件Bitmapper.c

/*
 * Bitmapper.c
 *
 *  Created on: 2014年12月18日
 *      Author: fengyhack
 */
#include "Bitmapper.h"

void printType(const int t)
{
	printf("\tCompress type: ");
	switch (t)
	{
	case 0:
		printf("UNCOMPRESSED");
		break;
	case 1:
		printf("BI_RLE8");
		break;
	case 2:
		printf("BI_RLE4");
		break;
	default:
		break;
	}
	printf("\n");
}

void ShowBitmapInfo(BITMAPHEADER* pBitmapHeader)
{
	printf("\n------------------- INFORMATION -------------------\n");
	printf(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值