抱歉我的英语不好。
目前我正在使用这种方式。
Gdiplus::Image img(L"xxx.png");
Gdiplus::Graphics g(hdc);
g.DrawImage(&img,0,0);
当我使用PNG时,如果我绘制超过400 * 200像素,我的FPS会下降39~45。
但改为使用BMP图像FPS保持维持60.
我如何解决这个问题?。
转换pixelformat
我用这种方式(没有工作)
img = Image::FromFile(filename);
bmp = new Bitmap(img->GetWidth(), img->GetHeight(), PixelFormat32bppPARGB);
Graphics gra(hdc);
gra.FromImage(bmp);
gra.DrawImage(img, destX, destY, img->GetWidth(), img->GetHeight());
答案 0 :(得分:0)
我想这是由于PixelFormat。
GDI(+)在内部使用PixelFormat.Format32bppPArgb。绘图时会转换所有其他格式。转换可能会导致您的性能问题。
因此,如果您想要经常绘制图片,请在加载时自行转换,而不是让GDI在每次绘制时都这样做。
修改强>
PixelFormat可以像这样“转换”:
// Load png from disc
Image png = Image.FromFile("x.png");
// Create a Bitmap of same size as png with the right PixelFormat
Bitmap bmp = new Bitmap(png.Width, png.Height, PixelFormat.Format32bppPArgb);
// Create a graphics object which draws to the bitmap
Graphics g = Graphics.FromImage(bmp);
// Draw the png to the bmp
g.DrawImageUnscaled(png, 0, 0);
请注意,Image,Bitmap和Graphics对象实现了IDisposable,并且在不再需要时应该正确处理。
干杯
托马斯