求助:构造位图并显示出错.急!

gxgonline 2004-09-29 02:48:29
BITMAPINFO* pBmpInfo;
int nSize = sizeof(BITMAPINFO);//sizeof(BITMAPINFOHEADER) + (256 * sizeof( RGBQUAD) );
m_pBmpInfo = (BITMAPINFO*) new UCHAR[nSize];
m_pBmpInfo->bmiHeader.biSize= (DWORD) sizeof(BITMAPINFOHEADER);
m_pBmpInfo->bmiHeader.biWidth= (LONG)pDoc->pTag.ImageWidth; //m_nScreenWidth;
m_pBmpInfo->bmiHeader.biHeight= (LONG)-pDoc->pTag.ImageHeight; //m_nScreenHeight;
m_pBmpInfo->bmiHeader.biPlanes= (WORD)1; //必须是1
m_pBmpInfo->bmiHeader.biBitCount= (DWORD)pDoc->pTag.BitsPerSample; //每个象素的位数
m_pBmpInfo->bmiHeader.biCompression = BI_RGB; //压缩类型
m_pBmpInfo->bmiHeader.biSizeImage= (DWORD)pDoc->pTag.StripByteCounts;//tif->Width * tif->Height * nBitsPerSample / 8;
m_pBmpInfo->bmiHeader.biXPelsPerMeter= (LONG) pDoc->pTag.XResolution; //水平分辨率
m_pBmpInfo->bmiHeader.biYPelsPerMeter= (LONG) pDoc->pTag.YResolution; //垂直分辨率
m_pBmpInfo->bmiHeader.biClrUsed= 0; //all colors are important
m_pBmpInfo->bmiHeader.biClrImportant = 0;

char* pVal;
pVal = pDoc->pTag.DataBuff;
CDC memdc;
memdc.CreateCompatibleDC (pDC);
HBITMAP hBitmap=CreateDIBitmap(pDC->m_hDC,&(pBmpInfo->bmiHeader),CBM_INIT,pVal,pBmpInfo,DIB_RGB_COLORS);//报错!!!
//HBITMAP CreateDIBSection(...);
memdc.SelectObject(hBitmap);

pDC->BitBlt(12,23,230,230,&memdc,0,0,SRCCOPY);
::DeleteObject(hBitmap);
memdc.DeleteDC();
...全文
62 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
alene_cn 2004-09-29
  • 打赏
  • 举报
回复
根据位深度来判断调色板的大小。

int nSizeTable = 0;
if (pBIH->biBitCount < 24)
{
nSizeTable = (1 << pBIH->biBitCount) * sizeof(RGBQUAD);
}

nSize = sizeof(BITMAPINFOHEADER) + nSizeTable;
gxgonline 2004-09-29
  • 打赏
  • 举报
回复
提示CreateDIBitmap()处出错,请帮忙看看到底问题出在哪里?谢谢
m_pBmpInfo = (BITMAPINFO*) new UCHAR[nSize];//应该申请多大的内存?
如果nSize = sizeof(BITMAPINFO);的话申请了44字节,如果nSize = sizeof(BITMAPINFOHEADER) + (256 * sizeof( RGBQUAD) );申请了1064个字节,也就是多了255*sizeof(RGBQUAD)个字节。
请各位大虾帮忙

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧