【发布时间】:2011-02-03 03:04:48
【问题描述】:
我想知道是否有一种超级有效的方法可以确认 Image 对象引用的是全黑图像,因此位图中的每个像素都是 ARGB(255, 0, 0, 0)。
你会推荐什么?这些位图中的大多数将是 1024 x 6000 像素(尽管假设它们总是这样的大小并不安全)。
我需要这个,因为我们遇到了 PrintWindow API 的问题。我们发现在将近 20% 的情况下,至少图像的某些部分将是黑色方块(后续捕获将成功)。我解决这个问题的想法是对每个子窗口调用 PrintWindow 或 WM_PRINT,然后将窗口的整个图像拼凑在一起。如果我能找到一种有效的方法来检测 PrintWindow 为特定子窗口返回了黑色图像,那么我可以在捕获时再次快速调用 PrintWindow。这很糟糕,但 PrintWindow 是唯一一种捕获适用于所有窗口(无论如何都是我想要的)的窗口的方法,并且支持捕获隐藏和/或屏幕外的窗口。
当 PrintWindow 失败时,它不会设置错误代码或返回任何表明它失败的信息。当它出现这个黑色方块问题时,它总是返回黑色的整个窗口或子窗口。因此,通过分别捕获每个子窗口,我可以确保我的每个捕获都有效,只要它包含至少一个非黑色像素。
显然,PrintWindow 在 Vista 及更高版本中更好,但在这种情况下,我们仅限于 Server 2003。
【问题讨论】:
-
你的意思不是检查每个像素?
-
选择一个随机但分布良好的像素数,如果它们都是黑色的,就假设整个像素都是黑色的?
-
@brendan 不完全是。我们的眼睛无法真正区分 0x010101 和 0。此外,我们的眼-脑连接和大脑回路花费的时间太长。
-
@Mat - 鉴于您现在告诉我们您尝试检测失败的 WM_PRINT 调用,请更改问题以包含此非常重要的信息。
-
@Simeon Pilgrim - 抱歉,我不想用信息过多地回答这个问题,我已经添加了我认为相关的内容。