PDA

Просмотр полной версии : Аналог setPixels() для альфы


uglan
21.10.2013, 19:36
Привет!
Столкнулся с одной проблемой, пользуюсь быстрым и удобным способом копировать битмапдату getPixels/setPixels, однако для отрисовки прозрачных битмап этот вариант не подходит. И вот беда, аналогичных методов нет в классе битмапдаты. getPixel32 и setPixel32 теоретически подходящие для альфы не используют byte array в отличии от getPixels/setPixels. Как быть?
Часть кода:
private var ba:ByteArray = new ByteArray();
var bmd:BitmapData = new BitmapData(800, 600, true, 0x0);
var bm:Bitmap;
var brushSrc:Brush = new Brush();

bm = new Bitmap(bmd,"auto",true);
addChild(bm);

ba = brushSrc.getPixels(new Rectangle(0,0,64,64));
ba.position = 0;
bmd.setPixels(new Rectangle(x, y,64,64),ba);

samana
22.10.2013, 02:20
Ещё есть
getVector(rect:Rectangle):Vector.<uint>
Формирует векторный массив из прямоугольного участка пиксельных данных.

setVector(rect:Rectangle, inputVector:Vector.<uint>):void
Преобразует вектор в прямоугольную область пиксельных данных.

может вам подойдёт.

Wolsh
22.10.2013, 09:39
copyChannel() не подходит?

Да и, собственно, зачем Вам getPixels()? Есть же copyPixels(), зачем какие-то промежуточные ByteArray?
Я думаю эти методы (getPixels/setPixels) вообще не для копирования, а именно для промежуточной обработки/сохранения данных.

uglan
22.10.2013, 10:08
copyChannel() не подходит?
Да и, собственно, зачем Вам getPixels()? Есть же copyPixels(), зачем какие-то промежуточные ByteArray?
Я думаю эти методы (getPixels/setPixels) вообще не для копирования, а именно для промежуточной обработки/сохранения данных.

Мне впринципе все равно) главное результат - копирование прозрачной картинки и чтоб очень быстро. Сейчас нашел такой (http://www.cnblogs.com/heycup/archive/2011/01/24/1943012.html) бенчмарк, похоже вы правы, copyPixels самый быстрый.