比 GetPixel() 快吗?
Posted
技术标签:
【中文标题】比 GetPixel() 快吗?【英文标题】:Faster than GetPixel()? 【发布时间】:2014-12-30 21:06:42 【问题描述】:如何将GetPixel()
替换为更快的东西?
目前我正在使用:
temp = GetPixel(hMonitor, 1, 1);
if (pixelArray[0] != temp)
pixelArray[0] = temp;
counter++;
以上代码只是一个简化的例子。
这包含在显示屏上所有像素的 for 循环中。它将一个像素 (temp) 与前一个阵列的像素 (pixelArray) 进行比较。如果它已更改,则更换它。但是,我发现对显示屏上的每个像素使用 GetPixel() 需要很长时间。
我一直在阅读其他类似性质的问题,例如:
Fastest method of screen capturing
Get Pixel color fastest way?
...但我不确定哪种方法更好,例如 GDI 或 DirectX,也不知道我将如何实现这些方法。
更新:Windows GDI(使用 GetObject)到像素数组是我需要的,谢谢。这比 GetPixel() 快得多。
【问题讨论】:
铅笔、纸和放大镜比GetPixel
更有效,所以选择吧。
如何在我当前的代码中实现它?
你真正想用这个解决什么问题?
@ChuckWalbourn 本质上是在每个监视器的内存或磁盘中保存屏幕截图,然后每隔一分钟左右检查是否有任何变化(如果他们有增加计数器并替换字节,无符号长等.)
问题不在于你找不到解决方案,你已经从你发布的链接中找到了,而是如何实现这些。意思是你不理解他们。你需要先学习GDI或directX。我就是这样做的,你也应该这样做。
【参考方案1】:
我建议您检索指向位图像素数据的指针(假设您有 HBITMAP 句柄)。
这是通过GetObject() 完成的,它应该会返回一个BITMAP structure。这是您感兴趣的领域:
bmBits: 指向位图位值位置的指针。这 bmBits 成员必须是指向字符数组(1 字节)的指针 价值观。
然后您可以在缓冲区上运行每个像素的检查逻辑。使用 GetPixel 会更快。
【讨论】:
以上是关于比 GetPixel() 快吗?的主要内容,如果未能解决你的问题,请参考以下文章
从 Android.Graphics.Bitmap.GetPixels 获得的 RGB 值与 System.Drawing.Bitmap.GetPixel 略有不同
单色位图SetPixel/GetPixel问题... Win32 C代码