flex 加载图片的同时获取加载图片的大小
2016-08-24 00:25
183 查看
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init()" > <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ import flash.events.*; import flash.net.FileFilter; import flash.net.FileReference; import mx.controls.Image; private var fileReference:FileReference; private var byteArray:ByteArray; private var bitmapData:BitmapData; private var loader:Loader; private var winDIVTitle:String = "图片加载至内存显示预览"; public function init():void { fileReference = new FileReference(); loader = new Loader(); configureListeners(fileReference); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.CANCEL, cancelHandler); dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(Event.SELECT, selectHandler); dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler); } private function getTypes():Array { var allTypes:Array = new Array(getImageTypeFilter()); return allTypes; } private function getImageTypeFilter():FileFilter { return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png"); } private function cancelHandler(event:Event):void { trace("cancelHandler: " + event); } /*** * 文件选择完成之后 * */ private function completeHandler(event:Event):void { trace("completeHandler: " + event); byteArray = fileReference.data; loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderCompleteHandler); loader.loadBytes(byteArray); } private function loaderCompleteHandler(e:Event):void { var bitmap:Bitmap = Bitmap(loader.content); bitmapData = bitmap.bitmapData; img.source = new Bitmap(bitmapData,"auto",true); ; /***矫正图片 让图片自动适应容器***/ imgLoadFinish(e); } private function uploadCompleteDataHandler(event:DataEvent):void { trace("uploadCompleteData: " + event); img.addEventListener(Event.COMPLETE, imgLoadFinish); } private function httpStatusHandler(event:HTTPStatusEvent):void { trace("httpStatusHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function openHandler(event:Event):void { trace("openHandler: " + event); } private function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function selectHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("selectHandler: name=" + file.name); //file.upload(uploadURL); /**将文件加载至内存,预览出来**/ fileReference.load(); } private function btnClick():void { fileReference.browse(getTypes()); } private function imgLoadFinish(evt:Event):void { //原始图片的大小 --- 第一次加载的时候这种方法获取不到图片的真实大小 //var real_width:Number = img.contentWidth ; //var real_height:Number = img.contentHeight; var real_width:Number = evt.currentTarget.content.width; var real_height:Number = evt.currentTarget.content.height; //容器的大小 var flashWidth:Number = divMain.width; var flashHeight:Number = divMain.height; //Alert.show("图片源文件大小:"+ real_width +" * " +real_height + "\n" + "容器大小: " + flashWidth +" * " +flashHeight,"容器、图片尺寸信息" ); //比值 var w_bi:Number = real_width/width; var h_bi:Number = real_height/height; if(w_bi < 1 && h_bi <1) { //第一次也不行 不能真正获取到真实大小 //img.width = img.content.width; //img.height = img.content.height; img.width = evt.currentTarget.content.width; img.height = evt.currentTarget.content.height; //Alert.show("img大小:"+ img.content.width +" * " + img.content.height + "\n" + "evt大小: " + evt.currentTarget.content.width +" * " + evt.currentTarget.content.height,"w_bi < 1 && h_bi <1" ); //Alert.show("图片宽高都比容器小"); } else { if(w_bi > h_bi) { img.width = flashWidth; img.height = real_height * flashWidth / real_width; //Alert.show("w_bi > h_bi" + img.width + "* " + img.height); } else { img.height = flashHeight; img.width = real_width * flashHeight / real_height; //Alert.show("w_bi < h_bi" + img.width + "* " + img.height); } } img.x = (flashWidth - img.width) / 2; img.y = (flashHeight - img.height) / 2; fileInfo.text = fileReference.name + "源文件大小( "+ real_width +" * " +real_height+")"; } ]]> </fx:Script> <s:Panel x="151" y="41" width="574" height="410" id="winDIV" title="{winDIVTitle}" horizontalCenter="0" verticalCenter="0" > <mx:Canvas x="10" y="10" width="552" height="323" id="divMain" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:Image id="img" horizontalAlign="center" verticalAlign="middle" /> </mx:Canvas> <s:Button x="480" y="341" label="浏览文件" id="scan" height="30" width="83" click="btnClick()"/> <s:Label x="10" y="341" width="451" height="26" id="fileInfo" verticalAlign="middle"/> </s:Panel> </s:Application>
效果图:
相关文章推荐
- Java不需要加载整张图片而获取图片的大小
- Android中一张图片加载后所占用内存大小的获取与测试
- JQ获取动态加载的图片大小的正确方法分享
- JQ获取动态加载的图片大小的正确方法分享
- img预加载获取图片大小方法
- jquery 加载完图片,获取大小
- ICON和CBitmap图片的加载及获取其大小
- js获取动态加载图片大小
- Android:图片不加载到内存获取图片的大小
- flex加载本地图片怎么获取到图片的详细信息
- js动态加载显示图片,获取大小
- Java不需要加载整张图片而获取图片的大小
- 获取动态加载的图片大小的正确方法
- JavaScript---控制图片加载后的大小
- 如何在客户端获取上传图片的大小
- 利用ASP获取设置图片尺寸大小
- [转]c# winform 用鼠标滚轮控制图片大小,获取鼠标中键滚轮事件,MouseWheel事件
- 获取图片文件原始大小的API函数
- 用javaScript获取文件,jpg图片大小