2014-11-04 58 views
0

我该如何更快更换GetPixel()比GetPixel()更快?

目前我使用:

temp = GetPixel(hMonitor, 1, 1); 
if (pixelArray[0] != temp) 
{ 
    pixelArray[0] = temp; 
    counter++; 
} 

上面的代码只是一个简单的例子。

这包含在显示屏上所有像素的for循环中。它将一个像素(温度)与前一个阵列的像素(像素阵列)进行比较。如果它发生了变化,则更换它。但是,我发现使用GetPixel()显示屏上的每个像素都需要很长时间。

我一直在阅读其他类似性质的问题,例如:

Fastest method of screen capturing

Get Pixel color fastest way?

...但我不知道哪种方法更好,比如GDI或DirectX以及我将如何实现所述方法。

更新:Windows GDI(使用GetObject)到像素数组是我需要的,谢谢。这比GetPixel()快得多。

+0

铅笔,纸和放大镜比'GetPixel'更高效,所以请选择。 – 2014-11-04 03:36:05

+0

我将如何将其实现到我当前的代码? – 2014-11-04 03:39:16

+0

你实际试图用这个解决什么问题? – 2014-11-04 05:39:19

回答

1

我建议你检索一个指向位图像素数据的指针(假设你有一个HBITMAP句柄)。

这是通过GetObject()完成的,它应该返回给您一个BITMAP structure。这是你感兴趣的领域:

bmBits: 指针为位图中位值的位置。 bmBits成员必须是指向字符数组(1字节) 值的指针。

然后,您可以运行缓冲区上每个像素的检查逻辑。这将比使用GetPixel更快。