Отсечение ImageSnapshot в Flex - PullRequest
       22

Отсечение ImageSnapshot в Flex

2 голосов
/ 20 февраля 2011

Я использую метод 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 Ответ

1 голос
/ 26 февраля 2011

Это работает для меня.Я увеличиваю исходное растровое изображение, а затем обрезаю его на новое изображение того же размера, что и старое.

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);
...