#flash #actionscript-3 #bitmap #bitmapdata
#flash #actionscript-3 #растровое изображение #bitmapdata
Вопрос:
У меня проблема с загрузкой прозрачных png-файлов. Что я пытаюсь сделать, это скопировать альфа-канал из загруженного png, а затем применить этот альфа-канал к другому объекту Bitmapdata.
Кто-нибудь может подсказать, как я мог бы это сделать?
Ответ №1:
Как оказалось, у меня есть класс, который делает именно это:
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.geom.Point;
import flash.geom.Rectangle;
public class BitmapAlphaMerge
{
public static function merge (imgBitmap:Bitmap, maskBitmap:Bitmap) : Bitmap
{
var img:BitmapData = imgBitmap.bitmapData;
var mask:BitmapData = maskBitmap.bitmapData;
var mergeBmp:BitmapData = new BitmapData(img.width, img.height, true, 0);
var rect:Rectangle = new Rectangle(0, 0, img.width, img.height);
mergeBmp.copyPixels(img, rect, new Point());
mergeBmp.copyChannel(mask, new Rectangle(0, 0, img.width, img.height), new Point(), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA);
return new Bitmap(mergeBmp);
}
}
}
Первый параметр imgBitmap
— это изображение, к которому вы хотите добавить альфа-канал. maskBitmap
это растровое изображение, с которого вы копируете канал. Вы могли бы довольно легко изменить это, чтобы использовать чистые объекты BitmapData.