菜鸟提问MFC,关于位图

live_for_you 2009-08-19 04:39:37
创建一个MFC的单文档,在view.cpp的void CMyView::OnDraw函数中写入如下代码
ASSERT_VALID(pDoc);

CDC MemDC;
MemDC.CreateCompatibleDC(pDC);



BITMAP bm;
bm.bmBits=NULL;
bm.bmBitsPixel=16;
bm.bmHeight=200;
bm.bmPlanes=1;
bm.bmType=0;
bm.bmWidth=100;
bm.bmWidthBytes=200;

CBitmap Bitmap;
Bitmap.CreateBitmapIndirect(&bm);
CBitmap *pOldBitmap=MemDC.SelectObject(&Bitmap);


Bitmap.GetObject(sizeof(BITMAP),&bm);
unsigned char * pData=new unsigned char [bm.bmHeight*bm.bmWidthBytes];
for(int y=0;y<bm.bmHeight;y++)
{
for (int x=0;x<bm.bmWidth;x++)
{
pData[x*3+y*bm.bmWidthBytes]=0;
pData[x*3+1+y*bm.bmWidthBytes]=0;
pData[x*3+y*bm.bmWidthBytes]=255;
}
}
Bitmap.SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,pData);
pDC->BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
delete [] pData;
目的是想练习一下位图的创建是使用,生成解决方案的时候提示成功,没有错误,但是调试执行的时候窗口刚现出来,就提示说“TODO:<文件说明>已停止工作”,把这段代码去掉是能运行的,我看不出来哪里错了,高手们指点一下~~~~
...全文
171 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
muarom 2009-08-19
  • 打赏
  • 举报
回复
我不知道你下面这段是什么目的,不过你已经越界访问了,
pData[x*3+y*bm.bmWidthBytes]=0;
pData[x*3+1+y*bm.bmWidthBytes]=0;
pData[x*3+y*bm.bmWidthBytes]=255;

可以多申请一点动态内存,unsigned char * pData=new unsigned char [bm.bmHeight*bm.bmWidthBytes *3]; 这样可避免运行出错
live_for_you 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 skynfly 的回复:]
是不是unsigned char * pData=new unsigned char [bm.bmHeight*bm.bmWidthBytes]; 分配的内存不够了
[/Quote]
能不能给个解决的办法?
skynfly 2009-08-19
  • 打赏
  • 举报
回复
是不是unsigned char * pData=new unsigned char [bm.bmHeight*bm.bmWidthBytes]; 分配的内存不够了
live_for_you 2009-08-19
  • 打赏
  • 举报
回复
还有个错误提示
Windows 已在 333.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 333.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 333.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。
快乐鹦鹉 2009-08-19
  • 打赏
  • 举报
回复
加断点调试,看哪一句出现的错误。

16,472

社区成员

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

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

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