請教高手:BMP圖片打開后 怎么讀取其資料?打開后的圖片資料存放在哪里?
BOOL CImg::AttachFromFile(LPCTSTR lpcPathName)
{
// 使用CFile物件簡化操作
CFile file;
if(!file.Open(lpcPathName, CFile::modeRead|CFile::shareDenyWrite))
return FALSE;
BOOL bSuc = AttachFromFile(file);
file.Close();
return bSuc;
}
/**************************************************
BOOL CImg::AttachFromFile(CFile &file)
功能:
打開指定的影像檔案并附加到CImg物件上
限制:
只能處理位圖影像
引數:
CFile &file
欲打開的CFile物件
回傳值:
BYTE型別,TRUE為成功,FALSE為失敗
***************************************************/
BOOL CImg::AttachFromFile(CFile &file)
{
// 檔案資料
LPBYTE *lpData;
// 位圖資訊頭
BITMAPINFOHEADER *pBMIH;
//add BITMAPFILEHEADER *pBMFH;
//BITMAPFILEHEADER *pBMFH;
// 顏色表指標
LPVOID lpvColorTable = NULL;
// 顏色表顏色數目
int nColorTableEntries;
BITMAPFILEHEADER bmfHeader;
// 讀取檔案頭
if(!file.Read(&bmfHeader, sizeof(bmfHeader)))
return FALSE;
// 檢查開頭兩位元組是否為BM
if(bmfHeader.bfType != MAKEWORD('B', 'M'))
{
return FALSE;
}
// 讀取資訊頭
pBMIH = (BITMAPINFOHEADER*)new BYTE[bmfHeader.bfOffBits - sizeof(bmfHeader)];
if(!file.Read(pBMIH, bmfHeader.bfOffBits - sizeof(bmfHeader)))
{
delete pBMIH;
return FALSE;
}
// 定位到顏色表 測驗
int aa=sizeof(RGBQUAD);
int bb=sizeof(BITMAPINFOHEADER);
nColorTableEntries =
(bmfHeader.bfOffBits - sizeof(bmfHeader) - sizeof(BITMAPINFOHEADER))/sizeof(RGBQUAD);
if(nColorTableEntries > 0)
{
lpvColorTable = pBMIH + 1;
}
pBMIH->biHeight = abs(pBMIH->biHeight);
// 讀取影像資料,WIDTHBYTES宏用于生成每行位元組數
int nWidthBytes = WIDTHBYTES((pBMIH->biWidth)*pBMIH->biBitCount);
// 申請biHeight個長度為biWidthBytes的陣列,用他們來保存位圖資料
lpData = new LPBYTE[(pBMIH->biHeight)];
for(int i=0; i<(pBMIH->biHeight); i++)
{
lpData[i] = new BYTE[nWidthBytes];
file.Read(lpData[i], nWidthBytes);
}
// 更新資料
CleanUp();
//////////////////////////////////////////////////////////////////////////
m_lpData = lpData;
m_pBMIH = pBMIH;
m_lpvColorTable = lpvColorTable;
m_nColorTableEntries = nColorTableEntries;
return TRUE;
}
uj5u.com熱心網友回復:
m_lpData = lpData;影像資料放在m_lpData成員變數里,通過m_lpData可以訪問影像資料。uj5u.com熱心網友回復:
(1)BMP圖片資料打開后 資料在哪?(2)BITMAPFILEHEADER 創建 bmfHeader后資料直接就存在于結構體中了么?
(3)!file.Read(&bmfHeader, sizeof(bmfHeader)中bmfHeader是剛創建的結構體,Read從哪里吧資料讀到地址&bmfHeader
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/122968.html
標籤:圖形處理/算法
上一篇:共同討論:MFC源代碼中_afxThreadData的AllocSlot()函式在分配一個槽時可能會覆寫一個已使用的槽
