2014-11-04 49 views
0

非常简单:如何仅用纯Flash保存图像? 用纯Flash保存图像?


示例代码:

var bitmap: BitmapData = new BitmapData(100, 100, true, 0); 
bitmap.draw(this); 
var data: ByteArray = bitmap.getPixels(bitmap.rect); 
var f: FileReference = new FileReference(); 
f.save(data, "test.bmp"); 

这节省了我的40000个字节(4 * 100 * 100)的文件。我用十六进制编辑器检查过它,它的我的位图/精灵的像素。现在我不在乎图像类型是什么出来的。我只是希望它以我可以用普通图像编辑器显示的格式保存。我不想安装额外的东西。我可以只使用Flash吗?没有AIR,没有JPGEncoder,没有额外的东西?

(此功能不为客户反正使用。)

+0

[PNGEncoder](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/graphics/codec/PNGEncoder.html)如何?而你的问题有点令人困惑,bmp能否正确保存? – DodgerThud 2014-11-04 07:47:02

+0

@DodgerThud只有像素被保存,没有图像的宽度或高度,没有位图标题。我只是仔细检查。 PNGEncoder不在我的系统中,所以它属于所有额外的东西。 – Bitterblue 2014-11-04 07:51:22

+0

那么,你可以用图像编辑器来看看.bmp吗?如果你想将它转换为另一个文件,你不会使用额外的东西 – DodgerThud 2014-11-04 07:52:52

回答

1

我找到了解决办法。 首先,您需要确保您的目标Flash Player的版本至少为11.3,并且编译SWF的版本至少为18(或至少18版本适用于我)。

BitmapData类具有自己的方法,称为encode,它将为您处理编码工作,无论是JPEG还是PNG。这里是如何做到这一点:

var bitmap:BitmapData = new BitmapData(100,100,true,0); 
bitmap.draw(this); 
var data:ByteArray = new ByteArray(); 
var o:PNGEncoderOptions = new PNGEncoderOptions(); 
bitmap.encode(bitmap.rect, o, data); 
var f:FileReference= new FileReference(); 
f.save(data, "test.png"); 

encode第三个参数是输出字节组,其中编码的ByteArray将得到保存。

AS3 Documentation

+0

令人惊讶的是它的工作原理。我认为任何以“PNGEncoder”或“JPEGEncoder”开头的东西都意味着死刑,但两种选项类都可用,并且编码也可以工作,尽管我本身无法访问编码器类。谢谢! – Bitterblue 2014-11-04 08:42:05

+0

没问题,我刚刚偶然发现了这个问题,查看了Docs。你应该保持谨慎,我认为它使用像PNGEncoder(和JPGEncoder)一样的东西,所以它很慢,并且会锁定你的UI线程,如果你编码非常大的图像。 – DodgerThud 2014-11-04 08:44:44

0

你仍然可以使用包括PNGEncoder或JPGEncoder,仍然是 “纯闪存”。如果你错过了库,你可以在as3corelib swc library中得到它们(和其他)。只需将swc包含在库路径中。

如果由于某种原因它不够纯粹,我想你总是可以进入库的源代码并复制出特定的PNGEncoder或JPGEncoder类,并将其用于您的使用。