Я думаю, что вы должны иметь в виду, как в следующем примере:
В этом примере я взял изображение и сделал его оттенками серого (верхний левый). В верхнем правом углу то же самое изображение в оттенках серого, но затем с красным наложением и установил режим смешивания на Darken. Самен с синим и желтым. Чтобы сделать серое изображение во флэш-памяти, необходимо установить одинаковые значения для каналов Red Blue и Green. Вы можете сделать это легко в мгновение ока. Сначала у вас должен быть объект bitmapData с изображением в нем. Затем сделайте его в оттенках серого и, наконец, сделайте наложение и смешайте его вместе.
Чтобы получить растровые данные с изображением, вы можете следовать примеру @ Adobe Reference
Я создал пример класса (работает на примере @ adobe), который делает именно то, что я сказал выше:
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.display.BitmapDataChannel;
import flash.display.BlendMode;
import flash.events.*;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
[SWF(width='900', height='481', backgroundColor='#FFFFFF', frameRate='30')]
public class BitmapExample extends Sprite {
private var url:String = "test.jpg";
private var fillColor:uint = 0xFF0000; //0xFF0000 = Red
public function BitmapExample() {
configureAssets();
}
private function configureAssets():void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
var request:URLRequest = new URLRequest(url);
loader.load(request);
}
private function completeHandler(event:Event):void {
var loader:Loader = Loader(event.target.loader);
var image:Bitmap = Bitmap(loader.content);
var bitmapData:BitmapData = image.bitmapData.clone();
//Now we have the bitmapData we can make it grayscale.
//First lock the data so it shows no changes while we are doing the changes.
bitmapData.lock();
//We now copy the red channel to the blue and the green channel.
bitmapData.copyChannel(bitmapData,bitmapData.rect,new Point(),BitmapDataChannel.RED,BitmapDataChannel.BLUE);
bitmapData.copyChannel(bitmapData,bitmapData.rect,new Point(),BitmapDataChannel.RED,BitmapDataChannel.GREEN);
//After the change we can unlock the bitmapData.
bitmapData.unlock();
//Create the overlay with the color set in the private var fillColor
var overlay:Bitmap = this.makeOverlayBitMap(bitmapData.width, bitmapData.height, fillColor);
//Set the blendMode to darken so it will will be just like the picture in the post.
overlay.blendMode = BlendMode.DARKEN;
//Add original to the stage
image.x = 0;
image.y = 0;
addChild(image);
//Add a copy next to it with the grayscale data
var image2:Bitmap = new Bitmap(bitmapData);
image2.x = image.width;
image2.y = 0;
addChild(image2);
//Add the overlay to the stage at position of the grayscale
overlay.x = image2.x;
overlay.y = image2.y;
addChild(overlay);
}
private function makeOverlayBitMap(theWidth:int, theHeight:int, theColor:uint):Bitmap{
var bitmapData:BitmapData = new BitmapData(theWidth,theHeight,false, theColor);
var returnBit:Bitmap = new Bitmap(bitmapData);
return returnBit;
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("Unable to load image: " + url);
}
}
}
Я надеюсь, что код и комментарии в нем сделают разговор. Если у вас есть вопросы, пожалуйста, задавайте их.