11月 052013
 

如何将swf里边的Bitmap或矢量图(简称显示对象,因为看得见,摸不着。可以裁剪,变形,旋转等等)生成本地的图片呢。这个

分两种情况,一种是在AIR运行时下,一种是在FlashPlayer下。在AIR运行时下,通过FileStream的writeBytes方法,将ByteArray

写入到本地。如果在FlashPlayer下,则用FileReference的save方法,将ByteArray写入到本地。所以,这个时候,需要将显示对象

编码成需要的ByteArray。这个转化不仅仅数据的转化,而是按照一定的压缩算法的转化(在Flashplayer11.3出现之前,大多利用第

三方类库PNGEnocder来处理的)。因此BitmapData的encode就有作用了。该API返回按照定义的压缩算法写入的ByteArray或直接

按照定义的压缩算法写入ByteArray。

flash.display.BitmapData.encode(rect:Rectangle, compressor:Object, byteArray:ByteArray=null):ByteArray
参数:
rect 要压缩的 BitmapData 对象的区域。
compressor 要使用的压缩程序类型。有效值为:
flash.display.PNGEncoderOptions、
flash.display.JPEGEncoderOptions 和 flash.display.JPEGXREncoderOptions。
byteArray 保存编码图像的输出 ByteArray。

至于如何将其他显示对象转换成BitmapData就不说了。下边分别写出在AIR下和在FlashPlayer下,将BitmapData生成图片的具体

的代码。

AIR下:

var bitmapData:BitmapData = boxList[i].bitmap.bitmapData;   //这里从一个列表里边取的一个BitmapData
var jpegEncoderOptions:JPEGEncoderOptions = new JPEGEncoderOptions(80);
var byteArray:ByteArray = bitmapData.encode(bitmapData.rect,jpegEncoderOptions);

//或 bitmapData.encode(bitmapData.rect,jpegEncoderOptions,byteArray);

var file:File = File.desktopDirectory;  //这里写死了,可以使用File的browse选择你要保存的路径
file = file.resolvePath(file.nativePath + “/image/” + “vini123.jpg”);
var fs:FileStream = new FileStream();
fs.open(file,FileMode.WRITE);
fs.writeBytes(byteArray);
fs.close();

 

FlashPlayer下:

var bitmapData:BitmapData = bitmap.bitmapData;
var jpegEncoderOptions:JPEGEncoderOptions = new JPEGEncoderOptions(80);
var byteArray:ByteArray = bitmapData.encode(bitmapData.rect,jpegEncoderOptions);

var file:FileReference = new FileReference();
file.save(byteArray,“vini123.jpg”);

8月 262013
 

 

  处理位图数据,一直是flash很重要的一块。在我们的应用中,处理保存图片到本地或上传多服务器上会经常遇到。比如用摄像头拍照上传或保存到本地。或AIR导入图片,处理后保存到磁盘。

在flash player 11.3和air3.3之前,我们可以借助第三方类(JPEGEncoder)这些,很容易处理。现在,有了encode和JPEGEncoderOptions这些,处理位图数据就更简单快捷了。

网上很多人测试过各个方法处理的性能以及占用文件大小情况,encode 都是不错的。

  官方给的解释:

Continue reading »

网站地图