Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net VB中高效访问单个像素_Vb.net_Image Processing_Bitmap - Fatal编程技术网

Vb.net VB中高效访问单个像素

Vb.net VB中高效访问单个像素,vb.net,image-processing,bitmap,Vb.net,Image Processing,Bitmap,我需要在VB中实现一个图像处理功能,而不必求助于低效的GetPixel/SetPixel方法 我更喜欢锁位/解锁位机制。但我发现的所有示例似乎都需要将位图缓冲区复制到中间字节数组。我发现这相当低效,我更喜欢直接访问位图缓冲区中的RGB字节 有一种简单的方法可以做到这一点吗?在C#中这样做更快更容易(请参阅),因为C#允许不安全的块和指针,这在VB中要麻烦得多。@Protoix:使用VB不是我的选择。通常我在C++中做这件事,而不是在显式的SSE/AVX矢量化中。 LockBits /解锁位< /

我需要在VB中实现一个图像处理功能,而不必求助于低效的GetPixel/SetPixel方法

我更喜欢锁位/解锁位机制。但我发现的所有示例似乎都需要将位图缓冲区复制到中间字节数组。我发现这相当低效,我更喜欢直接访问位图缓冲区中的RGB字节


有一种简单的方法可以做到这一点吗?

在C#中这样做更快更容易(请参阅),因为C#允许
不安全的
块和指针,这在VB中要麻烦得多。@Protoix:使用VB不是我的选择。通常我在C++中做这件事,而不是在显式的SSE/AVX矢量化中。<代码> LockBits /解锁位< /代码>也非常慢。这是因为它对操作执行锁定,更改您需要的内容,然后最终解锁,这被证明是低效的。我知道的方法是创建一个可写的位图,然后在那里执行一些操作,但我相信这只适用于Win8及以上版本。。。我想我可能有另一种方法,但它是非托管的……Lock/Unlock实际上是执行一个完整的图像转换,输入和输出,这解释了延迟。解决方案必须是纯VB。@YvesDaoust:我已经在VB.net中实现了该示例,它运行得很好。请注意,位图的构造方式是通过映射到位数组的(不安全)句柄,这就是
BitsHandle=GCHandle.Alloc(bits,GCHandleType.pinted)
code的目的。这允许在不锁定/解锁位图的情况下读取/写入位图,而且速度非常快。您可以不用复制整个位图缓冲区而不用锁定/解锁(我也这样做了),但是@saxonpike解释的技术是目前为止最快的。