如何雕刻感恩节土耳其的一半?

时间:2012-04-24 02:07:23

标签: php image-processing

我有一个很酷的问题。我试图突出这个火鸡的质量的50%。在实践中它不会是50%,但如果我能得到50%,我可以把剩下的都搞清楚了。

我目前的想法是:扫描每个像素以找出火鸡的质量,以像素为单位。然后,当我想要50%的火鸡时,从左到右突出显示像素,直到我突出显示50%的像素。

有没有人有更好的想法?这是最慢,蛮力的想法,需要在每个像素上循环一次以计算像素并再次突出显示50%的像素。

请注意,垂直划分图片不会留下50%的火鸡,因为火鸡的身体比它的脖子更加肉质。

This is a Turkey

2 个答案:

答案 0 :(得分:3)

你说百分比会改变,但我会在这里继续下去并假设火鸡本身不会。

所以你不需要循环两次。您只需要执行一次,将数据映射到您可以引用的某种形式的结构,然后每次需要突出显示时才引用它以确定您需要走多远。

例如,创建一个<percentage of mass (integer out of a hundred) => vertical column number (int)>

的关联数组

这样,当你需要遮蔽x%时,你只需要遍历cached_data [percent_to_highlight]像素列,将它们全部着色,然后一旦到达它就完全脱离循环。


为了获得更高的性能,请拍两张照片 - 一张完全阴影加上正常阴影。关联数组应映射percentage => byte_offset

对于您希望生成的每个图像,只需memcpy或任何PHP相当于来自非阴影和保存的着色图片的0 -> byte_offset的快速,远程复制。不再循环。你不能比这更快。

答案 1 :(得分:0)

这个问题看起来没有一个智能算法可以做到这一点。但是我也不是CG的专家,所以我可能错了。

如果最终在n上使用嵌套循环,那么尝试寻找这样的解决方案可以很好地增加时间复杂度(比O(n)),其中n是火鸡使用的总像素数。

相反,执行两个传递方式非常容易实现(实现的时间/工作量非常少),并且O(n)也忽略了常量2,这不是一个糟糕的解决方案。 取决于您正在编写此解决方案的目的,硬件,空间约束等;走这两条路可能会更有价值。