Flash AS3获取没有透明像素的bitmapdata区域

时间:2015-03-18 10:45:16

标签: image actionscript-3 crop bitmapdata threshold

我有一张商品图片。某些图像周围有白色边框。白色不均匀,有一些色调(质量差等)。我需要削减这个边界。要删除白色我使用:

bd.threshold(bd, rect, pt, ">", threshold, color, maskColor);

阈值后有一些非透明像素,因为阈值颜色对于每个图像都是唯一的。 BitmapData.getColorBoundsRect返回区域不包含透明像素。我需要没有这个像素的区域(只有图像)。检查每个像素对于大图片是不好的。最经济的方法是什么(在下面的图片中找到绿色区域)?对不起,我的英文不好,谢谢你的帮助。

image crop example

1 个答案:

答案 0 :(得分:1)

图像有四个边缘:左,右,上,下。从边缘开始检查每一个并向图像内部移动。

例如,让我们采取上边缘(y = 0)。

  1. 选择边缘中的任何水平位置,例如,x = 10.
  2. 检查(x,y)处的像素。
  3. 如果是透明的,请将边缘向下移动:y ++;
  4. 转到2并重复直到像素不透明。
  5. 选择不同的水平位置并转到2。
  6. 用不同的x重复几次。如果只有偶尔的非透明像素,重复该过程5-10次会给你一个新的上边缘,这很可能是100%精确。如果图像很大没关系,你只检查边缘的几个地方。对左,右和下边缘执行相同操作。然后复制这些边缘定义的图像。

    如果边缘质量非常差,那么最好手动编辑所有图像。