Обнаружение и удаление определенных пикселей из изображения - PullRequest
2 голосов
/ 18 февраля 2010

Можно ли обнаружить (динамически) белые пиксели изображения и удалить их?На самом деле у меня есть несколько изображений, которые я загружаю на сцене, но они квадратные без фактического изображения квадратного размера.Поэтому я хочу, чтобы область попадания точно соответствовала форме изображения, а не той границе, которая у них есть.

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

Вы можете сделать это, просматривая пиксели, по одному за раз, начиная с верхнего левого и нижнего правого, пока не найдете не белый пиксель. Вроде как это ...

Первое использование 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);
0 голосов
/ 18 февраля 2010

Вы можете перебирать данные растрового изображения, проверять каждый пиксель и видеть, соответствует ли его цвет белой границе, но могут возникнуть проблемы, если на изображении присутствуют другие белые пиксели, если только вы не проверяете только определенные позиции на изображении и действительно это начинает звучать очень грязно.

EDIT: Из того, что я понимаю, у вас есть изображения с белыми границами вдоль внешней стороны, и вы не хотите, чтобы границы были частью Hitarea. Я предлагаю вам отредактировать изображения (внешне в фотошопе) и удалить белые границы.

Затем вместо этого воссоздайте эти белые границы как отдельное изображение с помощью ActionScript. Было бы не сложно проверить размер фактического изображения, а затем создать спрайт немного больше и залить его белым. Затем поместите фактическое изображение поверх него и отцентрируйте. Так что теперь похоже, что изображение имеет границу. Вы можете поместить как белое изображение заливки, так и фактическое изображение в контейнер, чтобы их было легко перемещать как одно целое. Вы также можете легко установить изображение в качестве хитэрии, а не границы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...