【发布时间】:2011-08-20 21:58:27
【问题描述】:
在我的 Flex 应用程序中,我将图像加载到 Image 控件中。加载图像后,我可以应用颜色变换或灰度等滤镜,然后我想保存应用了滤镜的图像。我无法保存应用了过滤器的图像。使用以下代码,图像在没有过滤器的情况下被保存。但是,如果我使用
最终图像数据 = ImageSnapshot.captureBitmapData(myImage);
然后,图像会在应用过滤器的情况下保存,但会使用图像控件的尺寸。我想用原始尺寸保存图像。需要明确的是,如果图像是 1000px X 1000px 并显示在 300px X 300px 图像控件中,在保存时我仍然想以 1000px X 1000px 尺寸保存图像。怎么做?我也尝试过直接从下面的图像控件内容中获取 BitmapData,但这似乎不起作用。有帮助吗?
最终图像数据 = 位图(myImage.content).bitmapData;
var filtersArray:Array = new Array;
private var finalImagedata:BitmapData;
private function loadImage(url:String):void
{
var request:URLRequest = new URLRequest(url);
var imageLoader:Loader = new Loader();
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, image_completeHanlder);
imageLoader.load(request);
}
private function image_completeHanlder(event:Event):void
{
var bmd:BitmapData = Bitmap(event.currentTarget.content).bitmapData;
var bmpMy:Bitmap = new Bitmap(bmd);
myImage.data=bmpMy;
}
protected function button1_clickHandler(event:MouseEvent):void
{
loadImage("http://localhost/main/image.jpg");
}
protected function prepareFinalImage():void
{
finalImagedata = new BitmapData(myImage.content.width, myImage.content.height, true);
finalImagedata.draw (myImage.content);
}
protected function btnSave_clickHandler(event:MouseEvent):void
{
prepareFinalImage();
var encoder:Object = new Object();
var defaultName:String;
var je:*;
je = new JPGEncoder(100);
encoder.encode = je.encode;
defaultName = "myImage.jpg";
var imageBytes:ByteArray = encoder.encode(finalImagedata);
var fr:FileReference = new FileReference();
fr.save(imageBytes,defaultName);
}
protected function btnGrayScale_clickHandler(event:MouseEvent):void
{
var red:Number = 0.3086; // luminance contrast value for red
var green:Number = 0.694; // luminance contrast value for green
var blue:Number = 0.0820; // luminance contrast value for blue
var cmf1:ColorMatrixFilter = new ColorMatrixFilter([red, green, blue, 0, 0, red, green, blue, 0, 0, red, green, blue, 0, 0, 0, 0, 0, 1, 0]);
filtersArray.push(cmf1);
myImage.filters = filtersArray;
}
【问题讨论】:
-
您的意思是“如何将图像保存为原始大小”?如果不是,那么你应该去掉撇号,改写“如何以原始大小保存图像”
标签: apache-flex