Как я могу получить данные байтового массива из изображения определенной формы, например круга или квадрата?
Допустим, я хочу изменить ТОЛЬКО пиксель внутри этого круга, как я могу получить эти данные Bytearray? Есть идеи?
Как я могу получить данные байтового массива из изображения определенной формы, например круга или квадрата?
Допустим, я хочу изменить ТОЛЬКО пиксель внутри этого круга, как я могу получить эти данные Bytearray? Есть идеи?
Определите прямоугольник, содержащий круг, относительно левого верхнего угла изображения.
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()
.