开发者

Flex/actionscript snapshot

开发者 https://www.devze.com 2022-12-18 21:47 出处:网络
var bmd:BitmapData = ImageSnapshot.captureBitmapData(someSprite); trace(\"bmd size \"+getSize(bmd)); var bounds:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height);
         var bmd:BitmapData = ImageSnapshot.captureBitmapData(someSprite);
         trace("bmd size "+getSize(bmd));
         var bounds:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height);
     var snapshot:ImageSnapshot = new I开发者_StackOverflowmageSnapshot(0,0,bmd.getPixels(bounds));

         //var snapshot:ImageSnapshot = ImageSnapshot.captureImage(someSprite);
     var file:FileReference = new FileReference();
     file.save(snapshot.data,'abc.png');

In the above code after saving the file, when I try to open it, I get "This is not a valid bitmap file". I have tried 2-3 different viewers.


The constructor of the ImageSnapshot method takes width and height as its first two arguments. You are passing zeros. Change those to their actual values.

var snapshot:ImageSnapshot = new ImageSnapshot(bmd.width, bmd.height, 
        bmd.getPixels(bounds));


To extend Amarghosh's answer, look to the constructor of ImageSnapshot

ImageSnapshot(width:int, height:int, data:ByteArray, contentType:String)

The data field isn't expecting BitmapData pixel data (bmp.getPixels), it's expecting data encoded in the given contentType. So you could do:

var encoder:PNGEncoder = new PNGEncoder();
var bytes:ByteArray = encoder.encode(bmp);
new ImageSnapshot(width, height, bytes, encoder.contentType);

Once you have to encode it yourself anyway, you should probably do away with the second ImageSnapshot reference and use:

new FileReference().save(bytes, "abc.png");
0

精彩评论

暂无评论...
验证码 换一张
取 消