資源簡介
程序功能: 簡單"(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 數據過濾驗證
評論
共有 條評論