在Flex中剪切ImageSnapshot

时间:2011-02-20 20:10:56

标签: flex4 bytearray bitmapdata

我正在使用ImageSnapshot.captureImage()方法来捕获高2305像素,宽1134像素的地图图像。然后我试图将该图像剪辑为1100像素高和775像素宽的图像。

            public function grabScreenMapImage2():void {
            // use ppi of 100 for testing
            var ppi = 100;
            var mapHeightInPixels = 1100
            var mapWidthInPixels = 775

            var snapImage:ImageSnapshot = ImageSnapshot.captureImage(myMap, ppi, new JPEGEncoder());

            var bitmapData:BitmapData = new BitmapData(mapWidthInPixels, mapHeightInPixels);    

            var pixels:ByteArray = new ByteArray();
            pixels = snapImage.data;
            pixels.position = 0; 

            var clipRect:Rectangle = new Rectangle(0,0,mapWidthInPixels, mapHeightInPixels);

            bitmapData.setPixels(clipRect, pixels);

        }

然而,我收到错误#2030 - 在调用setPixels()时遇到文件结尾,并且在我的生活中无法解决原因。

任何帮助都非常感谢!

谢谢,

DrBacchus

1 个答案:

答案 0 :(得分:1)

这对我有用。我放大原始位图,然后将其裁剪成与旧图像大小相同的新图像。

var myScaleFactor:Number = 1/3;
var zoomArea:Rectangle = bitmapData.rect;
zoomArea.inflate(zoomArea.width * imageScale, zoomArea.height * myScaleFactor);
var croppedImage = new BitmapData(zoomArea.width ,zoomArea.height,false,0xCCCCCC);
croppedImage.copyPixels(imageData,zoomArea,new Point(0,0));
var newImage = new BitmapAsset(croppedImage);