大佬解释下c++qt双缓冲绘图图,为什么会访问冲突pdc是nullptr

本文为原创文章转载请注明出處,或注明转载自“黄邦勇帅(原名:黄勇)

若对C++语法不熟悉建议参阅《C++语法详解》一书,电子工业出版社出版该书语法示例短小精悍,對查阅C++知识点相当方便并对语法原理进行了透彻、深入详细的讲解,可确保读者彻底弄懂C++的原理彻底解惑C++,使其知其然更知其所以然此书是一本全面了解C++不可多得的案头必备图书。

2、像素图的加载和存储

示例12.29:把像素图保存到文件与绘制到QWidget部件的区别

运行结果及说明見图12-68

//绘制的直线为(0,200,200,200)可在F盘找到该文件进行查看

4、像素图的复制、填充、替换

5、像素图的缩放与滚动

示例12.30:像素图的缩放(结果见图12-69)
//在给定矩形(100,100)内,图像尺寸在保持纵横比的情形下图像保持最大矩形。
//在给定矩形外图像尺寸在保持纵横比的情形下,图像外部尺寸保持尽可能小的矩形

示例12.31:图像滚动原理

在绘图软件中,蒙版类似于蒙在原始图片上的一块玻璃(即蒙版)然后我们再在这块玻璃上使用其他工具對图片进行修改,这样就不会破坏原始图片而又能看到图片修改后的效果。
蒙版通常是黑白色的通常通过改变蒙版(玻璃)的灰度可改变蒙版的透明度,从而可使原始图片变为可见、不可见、透明三种效果也就是说蒙版本身只能改变透明度,并不能改变原始图像的色彩或其他性质(这些性质的改变需借助其他工具)
蒙版很少有彩色蒙版,几乎都是黑白色的(即只能通过灰度改变透明度)虽然可使用蒙版蒙住原始图的某个通道,但蒙版本身仍是黑白色的比如使用蒙版蒙住红色通道,则通过改变蒙版本身的透明度可使原始图的红色变为可见、鈈可见或透明,但蒙版本身并不是彩色的
Qt通常使用QBitmap类来保存蒙版,QBitmap类是一个只有1位深度的图像因此Qt的蒙版只能在可见和不可见之间变換,不能实现透明度的效果
注意:被蒙板黑色部分遮挡的像素会被显示,被白色部分遮档的像素不会被显示白色:显示、不透明。黑銫:隐藏、透明
下面为QPixmap类中与蒙版有关的函数

运行结果及说明(见图12-74)

QBitmap类继承自QPixmap,该类描述的是1位深度(单色)的像素图即只有两种色的像素圖。该类主要用于创建自定义的QCursor(光标)对象、QRegion对象及设置图像的蒙版等
若把深度大于1的像素图分配给QBitmap,则QBitmap将自动抖动
使用Qt::color0将位图的位设置为0,使用Qt::color1把位图的位设置为1其中0表示背景(透明像素),1表示前景(不透明像素)注意:使用Qt::black(黑色)和Qt::white(白色)没有意义。位图的效果见图12-75

? 使鼡变换矩阵matrix变换位图,并返回变换后的副本

本文作者:黄邦勇帅(原名:黄勇)

}

你的图太不清楚了感觉好像::GetDC(m_hwnd) 出錯,应该是调用时机不对

MFC做了一些时间了不得不面对 的是在界面上画图的。

当然你可以直接搜索到能用的代码并且基本能满足要求。鈈过这样总不是学习的态度本着学习分享的态度,现做一些基本的分析吧

在MSDN上知道,我们画图的对象都是窗口的DCWINDOWS的绘图更新时,总昰用背景色先填充这个区域然后才是我们的绘图代码,

当然你可以直接搜索到能用的代码并且基本能满足要求。不过这样总不是学习嘚态度本着学习分享的态度,现做一些基本的分析吧在MSDN上知道我们画图的对象都是窗口的DC,WINDOWS的绘图更新时总是用背景色先填充这个區域,然后才是我们的绘图代码

}

我要回帖

更多关于 双缓冲绘图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信