GDI+ Double Buffering
GDI+ Double Buffering
我已经设法实现双缓冲与GDI,但不是与GDI+。我想显示png图像没有它闪烁。此外,在某些时候,我也想用GDI+实现png图像的动画,所以知道如何使用GDI+双重缓冲是必要的。
我已经设法通过ISTREAM将png图像转换为图像对象:这里是我的代码的一部分,将帮助您了解我遇到的问题:
memmove(pBlock,pImage, size);
CreateStreamOnHGlobal(hBlock, FALSE, &pStream);
Graphics graphics(memDC);
Image image(pStream);
int image_width;
int image_height;
image_width= image.GetWidth();
image_height=image.GetHeight();
graphics.DrawImage(&image, posX,posY, image_width, image_height);
BitBlt(hdc, 0, 0, image_width, image_height, memDC, 0, 0, SRCCOPY);
注意:如果我直接绘制png图像到屏幕DC (hdc),它呈现良好。但是,当我尝试先将图像绘制到memDC,然后将该memDC放到屏幕上时,没有图像出现!
有人能指出我在正确的方向,有人是如何双重缓冲与GDI加?谢谢你
我认为你的问题可能是在你如何创建你的memDC -你是否使用CreateCompatibleDC()来创建,以确保它是与hdc兼容,你正在做的BitBlt()进入?
我以前回答过一个类似的关于双缓冲的问题,你可能会发现这个答案很有用:
GDI加速在Windows 7/绘图到内存位图
那里的代码,我已经使用了相当多的双缓冲区与GDI,但绘制到内存位图使用GDI或GDI+。我发现能够使用GDI真的很有用,因为它比GDI+在某些操作(尤其是位图相关的函数)上要快得多,但是GDI+做一些事情要容易得多,所以它提供了两个世界的最佳效果。
相关文章:
- C++在数学计算中将double转换为int
- 在c++中为double类型的数组创建一个unique_ptr
- vector<vector<double>> to mxArray using memcpy
- (double) 和 double() 之间的区别
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- C++ Version Of Double.longBitsToDouble
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 使用 std::vector<double> 访问由 std::unique_ptr<double[2] 管理的数据>
- 将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用
- 错误:无法将"<lambda(double)>"转换为"double(*)(double)"
- 如何正确将"strings"转换为"double"?
- 如何在<double>矢量中创建复杂类型的模板<T>?
- "double* grade"、"double *grade"和"double* fn()"有什么区别?
- 在不损失精度的情况下将double从C++传输到python
- 重复使用预分配的向量<复杂<double>>作为<double>长度两倍的向量
- C++ Win32 GDI double buffering
- C++/WinAPI GDI+ double buffering
- GDI+ Double Buffering