资源简介
程序功能: 简单"(8bit)Raw图像文件转换为(RGB24)Bmp图像文件"演示.
程序说明: 此程序只适合8bit的Raw图像文件转换, 如果是为10bit或12bit等, 请自己修改程序.
"测试图片"文件夹中提供了"8bitRaw图像文件"以及"转换后的Bmp文件".
代码片段和文件信息
/********************************************************************
created: 2010/04/06
created: 6:4:2010 18:00
filename: RawToBmp.cpp
file path: RAW8ToRGB24
file base: RawToBmp
file ext: cpp
author: haifeng_liu
purpose: 简单“(8bit)Raw图像文件转换为(RGB24)Bmp图像文件“演示
*********************************************************************/
#include
#include
#include
#include
#define H 480 // 定义要转换图像行数
#define W 640 // 定义要转换图像列数
// 注: 在将Flag 设置为0之前 请自己实现
// void RGB24_GeomMir( BYTE *pImage const UINT iHeigh const UINT iWidth BOOL bDirection )
// 这个函数
// Flag == 1 则以像素点(包含RGB三个分量)为单位进行操作
// Flag == 0 则分别以R G B分量为单位进行操作
#define Flag 1
typedef enum {
B // 定义Raw数据中Blue Data
Gb // 定义Raw数据中Green Data
Gr // 定义Raw数据中Green Data
R // 定义Raw数据中Red Data
} ColorType;
typedef struct {
BYTE byB;
BYTE byG;
BYTE byR;
} RGBPixel; // 定义RGB24的一个像素点
typedef struct {
DWORD dwBout;
DWORD dwGout;
DWORD dwRout;
} RGBSumData;
// 常见RAW转RGB 有“最邻近插值法“和“双线性插值算法“
// 这里使用双线性插值算法 使用双线性插值算法得到的图像比较平滑
// 而利用“最邻近插值算法“会丢失图像的一些边缘信息 优点就是速度很快
//
// +++++
void BToRGB(const UINT iY const UINT iX const BYTE *pImage RGBSumData& SumData);
void GbToRGB(const UINT iY const UINT iX const BYTE *pImage RGBSumData& SumData);
void GrToRGB(const UINT iY const UINT iX const BYTE *pImage RGBSumData& SumData);
void RToRGB(const UINT iY const UINT iX const BYTE *pImage RGBSumData& SumData);
void AjustValue(RGBSumData& SumData);
// -----
// 对图像做垂直镜像变换
void RGB24_GeomMirV(RGBPixel *pImage const UINT iHeigh const UINT iWidth);
void RGB24_GeomMirV(BYTE *pImage const UINT iHeigh const UINT iWidth);
// 对图像做水平镜像变换
void RGB24_GeomMirH(RGBPixel *pImage const UINT iHeigh const UINT iWidth);
void RGB24_GeomMirH(BYTE *pImage const UINT iHeigh const UINT iWidth);
// 对图像做镜像变换
void RGB24_GeomMir(RGBPixel *pImage const UINT iHeigh const UINT iWidth BOOL bDiretion);
void RGB24_GeomMir(BYTE *pImage const UINT iHeigh const UINT iWidth BOOL bDirection);
void main()
{
UINT i = 0 j = 0;
ULONG lIdx = 0;
char filename[50];
RGBSumData SumData = {0};
ColorType ct;
BYTE* image1=new BYTE[H*W];
#if Flag
RGBPixel *image2 = new RGBPixel[H*W];
#else
BYTE *image3 = new BYTE[H*W*3];
#endif
BITMAPFILEHEADER* fileheader;
BITMAPINFOHEADER* infoheader;
unsigned int FHlen=sizeof(BITMAPFILEHEADER);
unsigned int IHlen=sizeof(BITMAPINFOHEADER);
//位图信息头结构
infoheader=new BITMAPINFOHEADER;
memset(infoheader0IHlen);
infoheader->biSize =40;
infoheader->biWidth =W;
infoheader->biHeight =H;
infoheader->biPlanes =1;
infoheader->biBitCount =24;
infoheader->biCompression =BI_RGB;
infoheader->biSizeImage =H*W*3;
//位图文件头结构
fileheader=new BITMAPFILEHEADER;
memset(fileheader0FHlen);
fileheader->bfType =0x4D42;
fileheader->bfSize =FHlen+IHlen+H*W*3;
fileheader->bfOffBits=FHlen+IHle
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 12109 2010-04-06 18:03 RAW8ToRGB24\RawToBmp.cpp
文件 3429 2010-03-15 18:46 RAW8ToRGB24\RawToBmp.dsp
文件 541 2010-03-15 13:39 RAW8ToRGB24\RawToBmp.dsw
文件 57344 2010-04-06 18:04 RAW8ToRGB24\Release\RawToBmp.exe
文件 307200 2010-03-11 16:16 RAW8ToRGB24\测试图片\待转换的Raw文件\BufferRAW.raw
文件 921654 2010-04-06 17:54 RAW8ToRGB24\测试图片\转换后的Bmp文件\Buffer.bmp
文件 216 2010-04-06 18:08 RAW8ToRGB24\说明.txt
目录 0 2010-04-06 17:55 RAW8ToRGB24\测试图片\待转换的Raw文件
目录 0 2010-04-06 17:55 RAW8ToRGB24\测试图片\转换后的Bmp文件
目录 0 2010-04-06 18:04 RAW8ToRGB24\Release
目录 0 2010-04-06 17:55 RAW8ToRGB24\测试图片
目录 0 2010-04-06 18:07 RAW8ToRGB24
----------- --------- ---------- ----- ----
1302493 12
- 上一篇:课程设计简易计算器设计
- 下一篇:kettle 数据过滤验证
评论
共有 条评论