【MFC】 GDI绘图

wojiushi3344 2010-08-31 08:27:52
大家好,我才学MFC没好久,现在像大家请教个问题是不是在用CDC绘图的时候,每绘制一张图片都得创建一个兼容DC,然后再用SelectObject()函数把位图句柄选进DC中,最后绘制.
在绘制多张图片的时候能不能只创建一个兼容DC。因为我有几十张图片,如果每张图片我都去创建一个的话,那样好麻烦额!如果能的话具体是怎样实现的。
...全文
164 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wojiushi3344 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 windsonzhl 的回复:]
兼容DC(内存DC)实际上是双缓冲处理,你直接用屏幕DC画也是可以的。
见5L。
[/Quote]

你说的我还没有试过,还不知道得行不得行?今天回去试一下!
  • 打赏
  • 举报
回复
应该说BitBlt和StretchBlt等一组GDI方法都是像素操作方法,
而不是位图输出方法。直接输出位图可以使用图案画刷。

CDC::CreatePatternBrush() 或 CDC::CreateDIBPatternBrush()

说到底可直接输出的位图数据就是像素数据,即BYTE指针,CBitmap或HBITMAP
都只是像素数据的封装形式而已。图像处理的高手应习惯于直接处理像素数据。
OpenGL提供的位图或纹理图像输出方法就是以像素数据指针为参数的。
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wojiushi3344 的回复:]
引用 9 楼 windsonzhl 的回复:
兼容DC(内存DC)实际上是双缓冲处理,你直接用屏幕DC画也是可以的。
见5L。


你说的我还没有试过,还不知道得行不得行?今天回去试一下!
[/Quote]

噢……有段时间没碰GDI了(GDI+用的比较多),想了想,输出位图的话,好像还真是需要一个辅助DC。
pshchao 2010-09-01
  • 打赏
  • 举报
回复
自己封装个函数,有设备DC和内存DC 每次绘制调用这个函数就行了

BOOL Draw(CDC *pDC,CDC *memDC)
{
//用memDC选入图片 画到pDC上
}

仅供参考
wojiushi3344 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 joyzml 的回复:]
...
SelectObject(&bitmapA);
Bitblt(...
SelectObject(&bitmapB);
Bitblt(...
...
SelectObject(pOldbmp);
...
[/Quote]

我知道这样可以但是能不能有更方便的
wojiushi3344 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gameslq 的回复:]
>>在绘制多张图片的时候能不能只创建一个兼容DC。因为我有几十张图片,如果每张图片我都去创建一个的话,那样好麻烦额!如果能的话具体是怎样实现的。
双缓冲方式:
如果想在一个DC中显示多张图片,建立一个主兼容DC 然后再建立位图兼容DC
1.把图A选进位图兼容DC 然后Bitblt(... 到兼容DC
2.把图B选进位图兼容DC 然后Bitblt(... 到兼容DC
普通方式
……
[/Quote]
哥子你回答的貌似没看懂我的意思,我的意思是说在绘制多张图片的时候,能不能不用为每张图片都创建个兼容DC。
周晓荣 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gameslq 的回复:]
>>在绘制多张图片的时候能不能只创建一个兼容DC。因为我有几十张图片,如果每张图片我都去创建一个的话,那样好麻烦额!如果能的话具体是怎样实现的。
双缓冲方式:
如果想在一个DC中显示多张图片,建立一个主兼容DC 然后再建立位图兼容DC
1.把图A选进位图兼容DC 然后Bitblt(... 到兼容DC
2.把图B选进位图兼容DC 然后Bitblt(... 到兼容DC
普通方式
……
[/Quote]
很好~~~学习了。
gameslq 2010-08-31
  • 打赏
  • 举报
回复
>>在绘制多张图片的时候能不能只创建一个兼容DC。因为我有几十张图片,如果每张图片我都去创建一个的话,那样好麻烦额!如果能的话具体是怎样实现的。
双缓冲方式:
如果想在一个DC中显示多张图片,建立一个主兼容DC 然后再建立位图兼容DC
1.把图A选进位图兼容DC 然后Bitblt(... 到兼容DC
2.把图B选进位图兼容DC 然后Bitblt(... 到兼容DC
普通方式
如果想在一个DC中显示多张图片,建立一个主兼容DC
1.把图A选进主兼容DC,然后Bitblt(... 到窗口DC
2.把图B选进主兼容DC,然后Bitblt(... 到窗口DC

可以找谢例子看看,很快就明白了.
  • 打赏
  • 举报
回复
CDC,我的理解是,可以看成一块黑板,你可以在上面绘图,想要绘制新图是,擦除原有的图(selectobject新的图)即可。
GARY 2010-08-31
  • 打赏
  • 举报
回复
...
SelectObject(&bitmapA);
Bitblt(...
SelectObject(&bitmapB);
Bitblt(...
...
SelectObject(pOldbmp);
...
bragi523 2010-08-31
  • 打赏
  • 举报
回复
一个DC,多次SelectObject就行了啊
Eleven 2010-08-31
  • 打赏
  • 举报
回复
你要一次显示多张还是连续显示多张?
jack54877012 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wojiushi3344 的回复:]
哥子你回答的貌似没看懂我的意思,我的意思是说在绘制多张图片的时候,能不能不用为每张图片都创建个兼容DC。
[/Quote]

按照我的理解,绘图的时候必须要选进DC,不一定要创建,你给他选进去不就行了,只创建一个好咯。但是如果不选进DC里那是不可能的吧。
  • 打赏
  • 举报
回复
兼容DC(内存DC)实际上是双缓冲处理,你直接用屏幕DC画也是可以的。
见5L。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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