AS3 отрисовывает фигуру в растровое изображение с помощью Antialias - PullRequest
1 голос
/ 17 мая 2011

Я нарисовал форму круга в AS3.Я хочу визуализировать круг в растровое изображение с красивыми / сглаженными краями.Поскольку я хочу, чтобы он работал на мобильных устройствах (Air Apps ограничены качеством сцены = низкий уровень), мне нужен обходной путь.Любая пользовательская фигура для растрового рендера доступна?

Ответы [ 5 ]

2 голосов
/ 16 сентября 2012

Рассматривали ли вы использовать метод drawWithQuality?

Метод drawWithQuality() работает точно так же, как метод draw(), но вместо использования свойства Stage.quality для определения качества векторного рендеринга вы задаете параметр качества для метода drawWithQuality().

2 голосов
/ 17 мая 2011

Не уверен, что это решение подойдет для Air Mobile Apps, но стоит посмотреть.

Didier Brun @ ByteArray.org опубликовал API, используемый для рисования примитивных фигур (как BitmapData, а не из вызовов Draw в Vector)., что может помочь вам нарисовать ваши круги так, как вы хотите.

http://www.bytearray.org/?p=67

Фрагмент кода (с этого URL):

// create the BitmapData to work on
var pixels:Raster = new Raster(320, 240, true);

// draw stuff
pixels.drawRoundRect( new Rectangle ( 20, 20, 200, 100), 18, 0xFF00FFFF );
pixels.drawRect( new Rectangle ( 70, 70, 100, 100 ), 0xFF009900 );
pixels.filledTri( 40, 40, 80, 110, 50, 30, 0xFF998811 );
pixels.aaCircle(100, 100, 40, 0x77AA88 );
pixels.circle(40, 40, 30, 0xFF000000);
pixels.line(10, 10, 60, 80, 0xFF000000 );

// show it
addChild ( new Bitmap ( pixels ) );

Надеемся, библиотека/ Исходный код совместим с вашим проектом!:)

1 голос
/ 17 мая 2011

Если это только что-то простое, например, круг, вы можете синтезировать плавное изображение попиксельно. Создать BitmapData достаточного размера и зациклить на пикселях. Для каждого пикселя вычислите расстояние от центра - если оно меньше радиуса круга - половину диагонали пикселя, установите пиксель в цвет круга. Если он больше радиуса круга + половина диагонали пикселя, вызовите setPixel32 (x, y, 0).
Пиксели, которые не соответствуют обоим условиям, находятся близко к краю - для точного сглаживания необходимо вычислить, сколько пикселей покрыто кружком. Может быть, вы можете найти какое-то убедительное простое приближение. Удачи!

Обновление: Хорошо, я думаю, что я могу вспомнить более простой подход ... Вы можете нарисовать свой круг или любые фигуры в два раза больше, чем они должны быть, затем нарисовать этот растровое изображение в другое с масштабом 0,5 (через матрицу) и сглаживанием. Это было бы суперсэмплингом 4х. Если качество этапа не влияет на сглаживание растрового изображения, оно должно работать.

1 голос
/ 17 мая 2011

StageQuality.LOW снизит качество растрового изображения, если вы используете draw(), потому что источник будет низкого качества, независимо от того, включен он в DisplayList или нет.способ обойти это .. Вы должны будете загрузить в круг графику или импортировать изображения для использования.

0 голосов
/ 17 мая 2011

В ActionScript 3 растровое изображение создается из BitmapData , поэтому необходимо сначала создать его с помощью

_bitmapData = new BitmapData(..

BitmapData имеет метод draw , передав DisplayObject экземпляр ( Sprite , MovieClip или другой) ему в качестве параметра, перетянет его содержимое в BitmapData .Пример:

var c:Sprite = new Sprite();
c.graphics.clear();
c.graphics.beginFill(0x00FF00, 0.5);
c.graphics.lineStyle(2.0);
c.graphics.drawRectangle(0, 0, 100, 100);
c.graphics.endFill();
var bd:BitmapData = new BitmapData(100, 100);
bd.draw(c);
var bitmap:Bitmap = new Bitmap(bd);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...