|
經(jīng)過幾天的資料收集和編寫,完成了24位圖片轉(zhuǎn)unsigner short 型數(shù)組的程序,具體設(shè)計方案和部分實現(xiàn)分析如下: 1.資料來源:參考embeded bbs論壇上提供的圖片轉(zhuǎn)數(shù)組BMP2C程序改寫。 2.軟件開發(fā)基于的開發(fā)環(huán)境和語言:os基于XP SP2 語言C++ 開發(fā)環(huán)境VS2005 VC++ 3.設(shè)計思路: 3.1 通過調(diào)用WIN32 內(nèi)部類BITMAPFILEHEADER 對讀取的圖片文件進行分析處理; 4.主要算法: 4.1 565圖片處理部分 for(int j = 0 ; j < bmInfo.biWidth ; j++) { // 讀取象素的值 BYTE byBlue, byGreen, byRed; fileInput.Read(&byBlue, sizeof(BYTE)); fileInput.Read(&byGreen, sizeof(BYTE)); fileInput.Read(&byRed, sizeof(BYTE)); // 以 5:6:5 模式合成16位值 byRed = byRed * 0x1F / 0xFF; byGreen = byGreen * 0x3F / 0xFF; byBlue = byBlue * 0x1F / 0xFF; unsigned short nValue = 0x0000; ![]() nValue = byRed << 11 | byGreen << 5 | byBlue; /**//* 寫入數(shù)組 */ // 8個數(shù)據(jù)就換一行 if(j % 8 == 0) ![]() ...{ strInfo = _T(" "); fileOutput.Write(strInfo.GetBuffer(strInfo.GetLength()), strInfo.GetLength()); strInfo.ReleaseBuffer(); } // 寫入數(shù)據(jù) strInfo.Format(_T("%#.4X, "), nValue); fileOutput.Write(strInfo.GetBuffer(strInfo.GetLength()), strInfo.GetLength()); strInfo.ReleaseBuffer(); 4.2 Bmp2array(void)函數(shù)整體定義部分
// 得到輸入文件 CString strInput; m_editInput.GetWindowText(strInput); // 得到輸出文件 CString strOutput; m_editOutput.GetWindowText(strOutput); TRY { // 打開輸入文件 CFile fileInput; if(!fileInput.Open(strInput, CFile::modeRead)) ![]() ...{
|