我在MFC中使用Visual Studio 6.0製作了一個應用程序,其中我正在更改位圖的顏色深度,該應用程序適用於除24位位圖以外的所有位圖圖片。我無法弄清楚它爲什麼會給出錯誤。我知道它發生錯誤的地方。 這是代碼。嘗試更改24位位圖的RGBQUAD時出錯
void CbitmapView::OnMenuRedMode()
{
CBmpViewerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(pDoc->m_bColorModeFlag == TRUE){
#ifdef _DEBUG
CMemoryState oldState,newState,diffState;
oldState.Checkpoint();
#endif
m_bmiView = (BITMAPINFO *)malloc(pDoc->dwInfoSize);
//m_bmiView = (BITMAPINFO *)GlobalAlloc(GPTR,pDoc->dwInfoSize);
CopyMemory(m_bmiView,pDoc->m_bitmapinfo,pDoc->dwInfoSize);
// m_bmiView = pDoc->m_bitmapinfo;
int nColorUsed = m_bmiView->bmiHeader.biClrUsed ;
if(nColorUsed != 0){
for(int i = 0; i < nColorUsed ; i++){
m_bmiView->bmiColors[i].rgbRed = (BYTE)255;
}
}else if(nColorUsed == 0){
nColorUsed = (1 << pDoc->m_bitmapinfo->bmiHeader.biClrUsed);
for(int i = 0; i < nColorUsed ; i++){
m_bmiView->bmiColors[i].rgbRed = (BYTE)255;
}
}
pDoc->m_bmpHandle = CreateDIBSection(NULL, m_bmiView,DIB_RGB_COLORS,
(void **)&pBitsView, NULL, 0);
CopyMemory(pBitsView,pDoc->m_pBits,pDoc->dwBitsSize);
if(m_bmiView != NULL){
//GlobalFree(m_bmiView);
free(m_bmiView); *//error comes at this point when it is 24 bitmap image.*
//delete(m_bmiView);
}
#ifdef _DEBUG
newState.Checkpoint();
if(diffState.Difference(oldState,newState)){
MessageBox(_T("Memory leak detected"));
diffState.DumpAllObjectsSince();
}
#endif
Invalidate();
// TODO: Add your command handler code here
}
}
的erorr是由VS6.0
損傷所示如下:在正常0x00423DF0塊(#234)之後。
在這種情況下,不是如何改變24位位圖顏色的彩色一個很好的例子?你可以請教我指導或給我一些提示,可以用來改變24位位圖的顏色。 – xMayank
您需要更改每個像素......沒有顏色索引。 – xMRi
好吧,我有我的像素數據。所以我必須遍歷所有像素,並設置我想要的顏色的顏色深度。 在這種情況下,這兩個函數GetPixel()和SetPixel()是否有用?你可以給我任何教程作爲參考。 – xMayank