Данные As3 и изображения ByteArray - PullRequest
1 голос
/ 19 октября 2010

Как я могу получить данные байтового массива из изображения, которое имеет определенную форму, например, круг или квадрат?

Допустим, я хочу изменить ТОЛЬКО пиксель внутри этого контура, как я могу получить эти данные Bytearray? alt text Есть идеи?

1 Ответ

2 голосов
/ 19 октября 2010

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

var radius:Number = 100;
var centerX:Number = 50;
var centerY:NUmber = 400;

var rect:Rectangle = new Rectangle(centerX-radius, centerY-radius, radius*2, radius*2);

Затем используйте getPixels(), чтобы вернуть ByteArray пикселей внутри прямоугольника.Теперь вы можете перебирать каждый пиксель и проверять, содержится ли он внутри круга.

var image:BitmapData;
var pixels:ByteArray = image.getPixels(rect);

for(var x:int; x<rect.width; x++){
    for(var y:int=0; y<rect.height; y++){
        // Read the pixels data ->
        var pixel:uint = pixels.readUnsignedInt();
        // Check this pixels distance from the center to make sure it is inside the circle.
        var dx:Number = x - radius;
        var dy:Number = y - radius;
        if(dx*dx+dy*dy <= radius*radius){
            // This pixel is inside the circle.
            ...
        }
    }
}

Затем, если вы изменили его, если хотите, вы можете записать его обратно на изображение, используя setPixels()

image.setPixels(rect, pixels);

Я на самом деле не использовал и не проверял ничего из этого, поэтому он может не работать.
Также было бы проще работать с данными, если вместо них использовать getVector() и setVector().

...