位图未在 CFrameWnd 的 OnPaint 中绘制
Bitmap not drawing in CFrameWnd's OnPaint
我似乎无法将CBitmap实际显示在屏幕上。。。这是OnPaint中的代码:
CRect frm;
GetClientRect(frm);
CClientDC dc(this);
//dc.FillSolidRect(CRect(0, 0, 1000, 1000), RGB(255, 255, 255));
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap* cache = dcMem.SelectObject(&components.icon.bmp);
dc.BitBlt(0, 0, 55, 55, &dcMem, 0, 0, SRCCOPY);
dc.SelectObject(cache);
组件的定义.icon.bmp是…
components.icon.bmp.LoadBitmap(BMP_BOARDER);
BITMAP icon;
components.icon.bmp.GetBitmap(&icon);
这里应该没有问题。位图是一个32位的alpha位图,LoadBitmap返回TRUE。
它也不适用于24位。
----明白了!我的资源出现问题
这段代码对我来说似乎不错,但仍然有很多地方可能出错。测试代码以了解问题所在:-如果你画了其他东西(例如矩形),它会出现在框架窗口上吗?-尝试将bmp保存到文件中,看看它是否正常。-尝试使用工具将bmp转换为24位,看看它是否有效。
一旦你知道问题在哪里,你就可以专注于这个问题。
也许你无法使用GDI绘制一个32位的bmp,但你应该得到一些东西(至少是一个黑色方块)。无论如何,如果你需要使用GDI绘制32位的alpha通道bmp,你必须对图像进行预乘,并使用AlphaBlend
方法而不是BitBlt。
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 绘制文本问题
- 在 QT C++中绘制/操作多边形
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 在现代OpenGL中,绘制GL_TRIANGLE奇怪的z轴行为的填充圆
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 位图未在 CFrameWnd 的 OnPaint 中绘制