c# - 速度 - 将位图数据复制到数组中还是直接使用它?

标签 c# .net performance image-processing bitmap

我使用的是 LockedBitmap 类,它简化了 C# 中位图数据的处理。目前它正在将数据复制到本地 byte[] 数组中,然后通过其类方法访问该数组以获取/设置像素颜色值。

这比直接通过指针访问锁定的位图数据更快还是更好?是否需要副本?

编辑:我不是在问是否可以直接使用位图数据,我每天都在使用它。我只是想比较这两种方法,以及是否有必要复制像素数据。


将像素数据复制到临时数组中:

// create byte array to copy pixel values
int step = Depth / 8;
Pixels = new byte[PixelCount * step];
Iptr = bitmapData.Scan0;

// Copy data from pointer to array
Marshal.Copy(Iptr, Pixels, 0, Pixels.Length);

直接读取像素值:

byte* p = (byte*)(void*)bmData.Scan0.ToPointer();
int ws = bmData.Stride;
byte* row = &p[i * ws];
byte Gcolor = row[j];
byte Bcolor = row[j + 1];
byte Rcolor = row[j + 2];

最佳答案

Is this faster or better than accessing the locked bitmap data directly via the pointer?

没有。它需要一个额外的复制操作,然后另一个操作将处理后的值复制回位图。

Is a copy needed at all?

仅在不安全代码不受欢迎或不可用的环境中。

关于c# - 速度 - 将位图数据复制到数组中还是直接使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14834108/

相关文章:

c# - 当我向其中添加一项时,为什么 NHibernate 会删除并重新创建集合中的所有关联?

c# - 使用 Linq 映射模型

.net - 如何使用 .NET 检查 Web 服务是否可用

c# - 遍历大量记录

c# - 分页和页面冲突 - ASP.Net Core Razor 页面与 MVC Controller 方法分页冲突

c# - Bot 可以处理来自 Skype 桌面应用程序的请求,但不能处理来自 Skype 商店应用程序的请求

c# - 获取发布版本中没有 pdb 文件的所有线程的堆栈跟踪

.net - 如何在 Visual Studio 中的引用代码中设置断点?

php - CodeIgniter Performance 多次加载 View 与 View 循环

silverlight - 为什么在 Visual Studio 2010 中使用 Silverlight 4 时一定会出现如此多的延迟?