检测并擦除图像中的特定像素

时间:2010-02-17 22:19:16

标签: actionscript-3 flash-cs4

是否可以检测(动态)图像的白色像素并将其删除?实际上我有一些我在舞台上加载的图像,但它们是正方形而实际图像不是正方形。所以我想让命中区域完全符合图像的形状而不是它们的白色边框。

ps:在动作中:)

2 个答案:

答案 0 :(得分:1)

你可以通过循环遍历像素,从左上角开始一次1,然后从右下角开始直到找到非白色像素。有点像......

首先使用getPixel

var j:Number = 0;
var i:Number = 0;
var tl_corner:Point; // top left corner
var br_corner:Point; // bottom right corner

for (j = 0; j < imageBitmapData.height; j++) {
    for (i = 0; i < imageBitmapData.width; i++) {
        if (imageBitmapData.getPixel(i, j) != 0xFFFFFF) {
            tl_corner = new Point(i, j)
        }
    }
}


for (j = imageBitmapData.height - 1; j >= 0; j--) {
    for (i = imageBitmapData.width - 1; i >= 0; i--) {
        if (imageBitmapData.getPixel(i, j) != 0xFFFFFF) {
            br_corner = new Point(i, j)
        }
    }
}

现在你有实际图像的左上角和右下角,没有白色。

现在使用copyPixels

var bmd:BitmapData = new BitmapData(br_corner.x - tl_corner.x, br_corner.y - tl_corner.y, false, 0x00000000);
bmd.copyPixels(imageBitmapData, new Rectangle(tl_corner.x, tl_corner.y, (br_corner.x - tl_corder.y), (br_corner.y - tl_corner.y)), new Point(0, 0));

现在你有一个BitmapData对象只有你想要的像素。随你做,也许:

var s:Sprite = new Sprite();
var bmp:Bitmap = new Bitmap(bmd);
s.addChild(bmp);

答案 1 :(得分:0)

你可以遍历位图数据,检查每个像素,看看它的颜色是否与白色边框匹配,但如果图像中有其他白色像素,可能会遇到麻烦,除非你只检查图像上的某些位置,真的是这个开始听起来很乱。

编辑: 根据我的理解,你在外面有白色边框的图像,你不希望边框成为hitarea的一部分。我建议您编辑图像(在Photoshop中外部)并删除白色边框。

然后使用ActionScript将这些白色边框重新创建为单独的图像。检查实际图像的大小然后创建一个更大的精灵并用白色填充它不是太难。然后将实际图像放在它上面并居中。所以现在看起来图像有边框。您可以将白色填充图像和实际图像放在容器中,以便将它们作为一个容易地移动。您也可以轻松地将图像设置为hitarea而不是边框​​。