gpt4 book ai didi

gdi+ Graphics::DrawImage 真的很慢~~

转载 作者:行者123 更新时间:2023-12-02 04:22:52 24 4
gpt4 key购买 nike

我正在使用 GDI+ Graphic 将 4000*3000 图像绘制到屏幕上,但速度非常慢。大约需要300ms。我希望它占用的时间少于 10 毫秒。

Bitmap *bitmap = Bitmap::FromFile("XXXX",...);

//--------------------------------------------------------//这部分大约需要 300ms,太糟糕了!

int width = bitmap->GetWidth();
int height = bitmap->GetHeight();
DrawImage(bitmap,0,0,width,height);

//------------------------------------------------------

我无法使用 CachedBitmap,因为我想稍后编辑位图。

我该如何改进它?或者有什么问题吗?

这个原生 GDI 函数还将图像绘制到屏幕上,并且只需要 1 毫秒:

SetStretchBltMode(hDC, COLORONCOLOR);   
StretchDIBits(hDC, rcDest.left, rcDest.top,
rcDest.right-rcDest.left, rcDest.bottom-rcDest.top,
0, 0, width, height,
BYTE* dib, dibinfo, DIB_RGB_COLORS, SRCCOPY);

//-------------------------------------------------------- -----------------

如果我想使用StretchDIBits,我需要传递BITMAPINFO,但是如何从Gdi+位图对象中获取BITMAPINFO?我通过FreeImage lib做了实验,我使用FreeImageplus对象调用StretchDIBits,它绘制得非常快。但是现在我需要绘制Bitmap,并在Bitmap的位数组上编写一些算法,如果我有一个Bitmap对象,如何获取BITMAPINFO?真是烦人-___________-|

最佳答案

如果您使用 GDI+,TextureBrush 类正是您快速渲染图像所需要的。我用它编写了几个 2D 游戏,帧速率约为 30 FPS 左右。

我从未用 C++ 编写过 .NET 代码,因此这里有一个 C# 风格的示例:

Bitmap bmp = new Bitmap(...)
TextureBrush myBrush = new TextureBrush(bmp)

private void Paint(object sender, PaintEventArgs e):
{
//Don't draw the bitmap directly.
//Only draw TextureBrush inside the Paint event.
e.Graphics.FillRectangle(myBrush, ...)
}

关于gdi+ Graphics::DrawImage 真的很慢~~,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com