首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将图像转换为灰度并通过自定义类BitmapSaver保存

将图像转换为灰度并通过自定义类BitmapSaver保存
EN

Stack Overflow用户
提问于 2014-06-15 06:50:34
回答 1查看 352关注 0票数 1

在将图像转换为灰度图像后,我想保存它。但我有一个问题,保存图像后,转换它。我成功地通过as3将图像转换为灰度,但是当我用自定义类BitmapSaver保存这个修改过的图像时,保存的图像又是原始颜色而不是灰度。我不明白为什么会这样?如果有人知道这个问题,请帮助我.!谢谢.!!

代码语言:javascript
复制
import flash.display.Bitmap;
import flash.display.Loader;
import fl.controls.Button;
import flash.net.FileReference;
import flash.net.FileFilter;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.ByteArray;
import fl.motion.AdjustColor;
import flash.filters.ColorMatrixFilter;
import com.flashandmath.dg.bitmapUtilities.BitmapSaver;

var imageFilter=new FileFilter("Images", "*.jpg;*.jpeg;*.gif;*.png");
var fileR:FileReference=new FileReference();
fileR.addEventListener(Event.SELECT, selectHandler);
fileR.addEventListener(Event.COMPLETE, completeHandler);

pickbutton.addEventListener(MouseEvent.CLICK,selectImage);

function selectImage(e:MouseEvent):void{
   fileR.browse([imageFilter]);
}
function selectHandler(e:Event):void{
   trace("selectHandler: "+fileR.name);
   fileR.load(); 
}
function completeHandler(e:Event):void {
   trace("completeHandler: " + fileR.name);
   var ba:ByteArray=fileR.data;
   var loader:Loader=new Loader();
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded);
   loader.loadBytes(ba);
}
var bm:Bitmap;

function loaded(e:Event):void{

   bm = e.currentTarget.loader.content as Bitmap;

   addChild(bm);
   adjustColor();
}

function adjustColor():void
{
    var ac:AdjustColor = new AdjustColor();

    ac.brightness = 20;
    ac.hue = 0;
    ac.saturation = -100;
    ac.contrast = 40;

    var ar:Array = ac.CalculateFinalFlatArray();
    var cl:ColorMatrixFilter = new ColorMatrixFilter(ar);

    var filter:Array = new Array(cl);
    bm.filters = filter;

    var saver:BitmapSaver = new BitmapSaver(bm.bitmapData);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-15 07:01:16

我认为这是因为您对图像应用了自定义过滤器,然后保存了bitmapData。过滤器不自行修改bitmapData,这意味着Flash在绘制图像时要小心操作它。想象一下,这就像一个应用在Flash中的模糊过滤器--它会使图像变得模糊,但是它不会修改原始图像,对吗?

因此,您只需要使用一个简单的draw来接受修改后的BitmapData并使用它,类似于这样:

代码语言:javascript
复制
var modified:BitmapData = new BitmapData(original.width, original.heigth);
modified.draw(original);

var saver:BitmapSaver = new BitmapSaver(modified);

也许只要稍微调整一下就行了。

编辑:正如@George 在评论中提供的那样,还有另一个很好的选择。如果您不需要原始的BitmapData,您可以直接为它设置一个过滤器,而不是显示对象。通过这种方式,原始源将被更改,并且使用任何类型的保护程序都将直接完成这个任务。请记住,你将无法扭转它。

无论如何,这是一种很好的方法,因为您不需要创建第二个BitmapData对象,这意味着您不会增加内存。

因此,根据原始BitmapData的需要,要么复制/克隆它,要么直接在其上使用过滤器。

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24227240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档