Как стереть область в объекте BitmapData? - PullRequest
5 голосов
/ 11 октября 2009

Flex 3, ActionScript 3, Flash player 9.

У меня есть изображение в объекте BitmapData. И массив баллов. Мне нужно стереть часть изображения внутри многоугольника, указанного точками. Другими словами, нарисуйте многоугольник, указанный точками, и заполните его прозрачностью.

Есть идеи, как это можно сделать?

Ответы [ 2 ]

9 голосов
/ 11 октября 2009

Получил работу со следующим кодом:

        var shape:Shape = new Shape();
        shape.graphics.beginFill(0x000000, 1); // solid black
        shape.graphics.moveTo(points[0].x, points[0].y);

        points.forEach(function (p:Point, i:int, a:Array):void {
                shape.graphics.lineTo(p.x, p.y);
            });
        shape.graphics.endFill();
        data.draw(shape, null, null, "erase");
1 голос
/ 11 октября 2009

Для прямоугольника вы можете использовать fillRect. Для многоугольника вам нужно будет нарисовать многоугольник совершенно другим цветом (чем другие цвета в растровом изображении) и использовать floodFill - но я не знаю, как нарисовать многоугольник. В классе растровых данных нет метода для рисования линий. Другой вариант - написать собственную логику для поиска пикселей внутри многоугольника и использовать метод setPixel32, чтобы установить их альфа-значения на ноль.

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

...