19,468
社区成员
发帖
与我相关
我的任务
分享
//CImage 中的HDC转换为CDC
CDC *pImageDC = CDC::FromHandle(m_DibImage.GetDC());
//使用GID+绘制图形到pImageDC中。
//......
//拷贝到窗口DC
dc.SetStretchBltMode(STRETCH_DELETESCANS);
dc.StretchBlt(
0, //选择在目标DC什么位置(X坐标)开始显示
0, //选择在目标DC什么位置(Y坐标)开始显示
m_rcClient.Width(), //选择在目标DC显示的宽度
m_rcClient.Height(), //选择在目标DC显示的高度
pImageDC, //源DC
0, //截取源DC的区域,起始X坐标
0, //截取源DC的区域,起始Y坐标
nPicWidth, //截取源DC的宽度
nPicHeight, //截取源DC的高度
SRCCOPY); //拷贝的模式
是我的做法不对吗?
还是这种做法是不允许的?
报错感觉像是DC中的内存越界?
[/quote]
这充分证明,
CImage类的Draw涵数本身带了相当一部分处理数据功能
也就是说,你一开始装载的图像并没有彻底处理好
也就是说要等画的时候在处理,
也就是说那一部分处理的代码耽搁了一倍的时间
所以,你直接使用DC是一定有问题的
即使用对了,因为没有经过Draw,结果也只是不完整的
所以不建议用CImage处理这种大图片
用CxImage,网上下一个,CSDN也有,免费的,顺便把使用说明也下来看看就会用了
现炒现卖,很适合你的习惯
//CImage 中的HDC转换为CDC
CDC *pImageDC = CDC::FromHandle(m_DibImage.GetDC());
//使用GID+绘制图形到pImageDC中。
//......
//拷贝到窗口DC
dc.SetStretchBltMode(STRETCH_DELETESCANS);
dc.StretchBlt(
0, //选择在目标DC什么位置(X坐标)开始显示
0, //选择在目标DC什么位置(Y坐标)开始显示
m_rcClient.Width(), //选择在目标DC显示的宽度
m_rcClient.Height(), //选择在目标DC显示的高度
pImageDC, //源DC
0, //截取源DC的区域,起始X坐标
0, //截取源DC的区域,起始Y坐标
nPicWidth, //截取源DC的宽度
nPicHeight, //截取源DC的高度
SRCCOPY); //拷贝的模式