Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Показ изображений с очень большим разрешением (http://www.flasher.ru/forum/showthread.php?t=148307)

qmel 27.12.2010 18:46

Показ изображений с очень большим разрешением
 
Здравствуйте!

Мне в большом рабочем проекте необходимо показывать тумбнейлы изображений с очень большим разрешением. Больше чем 8000x8000. Я использую Flex sdk 3.4 и AIR 2.5.1. По документации у них ограничения на BitmapData

Код AS3:

В AIR 1.5 и Flash Player 10 максимальный размер объекта BitmapData составляет 8,191 пикселя в ширину или высоту, а общее количество пикселей не может превышать 16,777,215. (Т. е. если ширина объекта BitmapData составляет 8,191 пикселя, его высота не может быть больше 2 048 пикселей.)

Тумбнейлы от изображений размером 8000x8000, как ни странно, генерятся по команде image.scaleContent=true без проблем и задержек. Тумбнейлы от больших по размеру изображений не показываются. Поэтому думаю использовать класс BigAssCanvas от Keith Peters-а
http://www.bit-101.com/blog/?p=1199 .

Я сделал маленький проект чтоб посмотреть получится ли отображать огромные рисунки с помощью этого BigAssCanvas :quiet:. Итак, проблемы:

1. Рисунки обычного разрешения вплость до 8000x8000 отображаются, 10024x9352 и выше - нет.
2. В принципе, мне не нужно показывать рисунок целиком, достаточно сгенерить тумбнейл среднего размера, но я не знаю как это сделать используя BigAssCanvas, а не стандартное image.scaleContent.

Так как BigAssCanvas писался для более старой версии Flex там везде соит ограничение 2880, пробую ставить 8191 по документации - падает. Поэтому видимо и толку от этой канвы нет, но вопрос, в таком случае, какие и куда ограничения ставить?

Код AS3:

var bmp:Bitmap = new Bitmap(new BitmapData(Math.min(2880, w), Math.min(2880, h), _transparent, _color));

Привожу код пробного приложения. Там еще есть progrees bar, чтоб ждать загрузки большого изображения, но она тоже пока не работает. :confused:

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml">
 
        <mx:Script>
                <![CDATA[
                        import flash.display.Bitmap;
                        import flash.display.BitmapData;
                        import flash.display.Sprite;
                        import flash.text.TextField;
 
                        import mx.controls.Image;
                        import mx.controls.ProgressBar;
                        import mx.controls.ProgressBarMode;
                        import mx.core.UIComponent;
 
                        import ui.BigCanvas;
                        import ui.UISprite;
 
                        private var _bmpfull:BigCanvas;
                        public var simpleSprite:Sprite = new Sprite();
                        public var _progressBar:ProgressBar = new ProgressBar();
 
                        public function Load(path:String ): void
                        {
                                var file: File = new File(path);
                                var img: Image = new Image();                                               
                                img.addEventListener( Event.COMPLETE, onImageLoaded );
                                img.load( file.url );
                        }
 
                        public function onImageLoaded( e:Event ):void
                        {
                                var img: Image = e.target as Image;
                                img.scaleContent=false;
 
                                var ImageBitmap:Bitmap = (img.content as Bitmap);
                                _bmpfull = new BigCanvas(ImageBitmap.width, ImageBitmap.height, true, 0x00000000) ;                               
                                img.removeEventListener( Event.COMPLETE, onImageLoaded );
 
                                _bmpfull.draw(ImageBitmap);
                                simpleSprite.addChild(_bmpfull);
                                var uic:UIComponent = new UIComponent();
                                uic.addChild(simpleSprite);
                                mycanvas.addChild(uic);
 
                                uic.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                                uic.addEventListener(Event.COMPLETE, completeHandler);
 
                                _progressBar.mode = ProgressBarMode.MANUAL;
                                _progressBar.percentWidth = 100;
                                _progressBar.setStyle("horizontalCenter", "0");
                                _progressBar.setStyle("verticalCenter", "0");
                                uic.addChild(_progressBar);
                                _progressBar.visible = false;
 
                        }
 
                        private function progressHandler(e:ProgressEvent):void {
                                _progressBar.setProgress(e.bytesLoaded,e.bytesTotal);
                                _progressBar.visible = e.bytesLoaded < e.bytesTotal;
                        }
 
                        private function completeHandler(e:Event):void {
                                _progressBar.visible = false;
                        }
 
                ]]>
        </mx:Script>
 
        <mx:Canvas id="mycanvas" height="100%" width="100%">
                        <mx:Button label="load images" click="{Load( 'C:/tmp/8000x8000.jpg' )}" />
        </mx:Canvas>
 
</mx:WindowedApplication>



Часовой пояс GMT +4, время: 20:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.