Renderscript马赛克效果

时间:2014-06-20 09:27:22

标签: android image-processing renderscript

我试图想出一种用renderscript作为学习练习来实现马赛克效果的方法,但是我找不到足够的信息来了解这些方法中的哪些方法(如果有的话)可行。

  1. 将位图拆分为n×n像素子位图。通过一个平均值为所有像素的脚本运行每个子位图,然后在java中将位图重新加入到一个位图中。我担心如果不同的像素同时更新同一个全局变量,使用forEach_root可能会导致并发问题。我可以使用循环遍历子位图中的每个像素以避免并发问题,但是我会失去forEach_root的好处。

  2. 保持原始位图不变并运行forEach_root。在脚本中,如果我可以知道元素的坐标,我可以找出像素应该在哪个方格,然后将每个像素添加到它所在的方格的相对(0,0)。

  3. 如果我可以创建仅包含选择像素的分配,那么每个马赛克方块可以有一个像素,并将该方块中的每个其他像素添加到代表像素。这将避免并发问题(如果存在),同时仍然允许多个同时执行

  4. 我真的很喜欢3号,但我不确定是否可以创建这样的分配。或者,如果由于不同的renderscript线程同时访问同一个变量而导致的冲突得到优雅处理,那么方法一或两个可能更容易。

1 个答案:

答案 0 :(得分:2)

这里的想法有点不同;假设你想为256x256图像创建4x4马赛克;

  1. 创建64x64分配以存储每个马赛克片颜色。

  2. 在此64x64分配上运行forEach,并将原始256x256分配设置为参数。

  3. 在每个forEach迭代中计算ie。原始图像4x4区域的平均颜色,这个马赛克片对应。

  4. 在原始256x256分配上运行forEach,并将之前计算的64x64作为参数。

  5. 在每个forEach迭代中,将颜色设置为相应的64x64分配颜色。

  6. 我认为这种方法应该很容易调整到不同形状和大小的马赛克。只有临时分配的开销。