gpt4 book ai didi

C# 使用新数据高效重绘图像

转载 作者:太空宇宙 更新时间:2023-11-03 23:17:44 25 4
gpt4 key购买 nike

在 C# 中使用新数据重新绘制图像的内存效率最高的方法是什么?

我正在使用的外部 DLL 分配一个字节缓冲区来保存我的 (width * hight * bytesPerPixel) 像素数据,其中每个像素都是 ARGB32 格式。 DLL 通过与硬件交互自动用新数据更新该缓冲区,然后调用 C# 回调表明新数据已准备就绪。现在,我显示新数据的方案是

var bmp = new Bitmap(_size.Width, _size.Height, PixelFormat.Format32bppArgb);
var bitmapData = bmp.LockBits(
new Rectangle(new Point(0, 0), _size),
ImageLockMode.UserInputBuffer | ImageLockMode.WriteOnly,
PixelFormat.Format32bppArgb,
unmanagedByteDataPtr);
bmp.UnlockBits(bitmapData);
myGui.ImageCtrl.Image = bmp;

这每次都会创建一个新的位图,这会降低内存/性能。由于我的图像大小没有改变,是否有更有效的方法来做到这一点?

最佳答案

您使用了错误的构造函数。只需直接从非托管数据创建一个位图,它就会包装数据,而不是创建一个新的位图并立即将其丢弃:

new Bitmap(_size.Width, _size.Height, 4 * _size.Width, PixelFormat.Format32bppArgb,
unmanagedByteDataPtr);

关于C# 使用新数据高效重绘图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36697633/

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