`
hanyi366
  • 浏览: 289301 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flex 读取 bmp 格式的图片

    博客分类:
  • Flex
 
阅读更多

    现在要求把后台bmp格式的图片,在flash中显示。如大家所知的,Flash已经内置了对jgp,png,gif图片的支持。不知道Adobe怎么想的,为啥不支持bmp呢。唉,bmp真是个苦命的孩子啊。

     不过还好有解决方案:以二进制的形式,把图片从后台加载到前台,然后通过bmp本身的格式进行解析,解析成为Flash认识的格式(BitMapData),然后就可以使用了哈,废话不多说了,看实例(加载24位bmp):

AS3.0代码

package service
{
	import flash.display.BitmapData;
	import flash.utils.ByteArray;
	import flash.utils.Endian;
	
	/**
	 * 读取24位的BitMap用类。<BR>
	 */
	public class BmpReader {
		
		/**
		 * 构造函数。<BR>
		 */
		public function BmpReader(){
			super();
		}
		
		/**
		 * 读取24位的BitMap。<BR>
		 */
		public static function read(byteArray:ByteArray):BitmapData {
			try {
				// 设置字节序
				byteArray.endian = Endian.LITTLE_ENDIAN;
				
				// 读取2字节,'BM'`对用十六进制为4D42,转化为十进制为19778
				if(byteArray.readUnsignedShort() == 19778) {
					
					// 跳到表示图片从头到图像数据的偏移量的字节
					byteArray.position = 10;
					var offset:int = byteArray.readInt();
					// 跳到表示图片宽和高的字节
					byteArray.position = 18;
					var imageWidth:Number = byteArray.readInt();
					var imageHeight:Number = byteArray.readInt();
					// 跳到表示图片位数的字节
					byteArray.position = 28;
					var biBitCount:int = byteArray.readUnsignedShort();
					// 本类仅处理24位bmp
					if(biBitCount != 24) {
						trace("Image Format Error");
						return null;
					}
					var bitmapData:BitmapData = new BitmapData(imageWidth, imageHeight, false, 0x00FFFFFF);
					var px:int = 0;
					var py:int = imageHeight;
					var rColor:int = 0;
					var gColor:int = 0;
					var bColor:int = 0;
					// 补齐用字节数
					var junkbyte:int= 4 - ((imageWidth * 3) % 4);
					
					while(py >= 0) {
						px = 1;
						while(px <= imageWidth) {
							if(byteArray.bytesAvailable > 3) {
								bColor = byteArray.readUnsignedByte();
								gColor = byteArray.readUnsignedByte();
								rColor = byteArray.readUnsignedByte();
								bitmapData.setPixel(px-1, py-1, 256*256*rColor+256*gColor+bColor);
							}
							px++;
						}
						// 跳过格式补齐用字节
						junkByteCheck(byteArray,junkbyte);
						py--;
					}
					
					
				} else {
					trace("Image Format Error");
					return null;
				}
			} catch (err:Error){
				trace(err.getStackTrace());
			}
			
			return bitmapData;
		}
		
		/**
		 * 跳过格式补齐用字节。<BR>
		 */
		private static function junkByteCheck(byteArray:ByteArray, junkbyte:int):void {
			var bavailable:int=byteArray.bytesAvailable;
	 		if ((junkbyte>0 && junkbyte < 4) && (bavailable >= junkbyte)){
	 			for (var i:int; i<junkbyte; i++){
	 				byteArray.readUnsignedByte();
	 			}
	 		}else{
	 			return
	 		}
		}

	}
}

 Flex mxml代码

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	layout="absolute" creationComplete="init()">
	<mx:Script>
		<![CDATA[
			import flash.net.URLLoader;
			import flash.net.URLLoaderDataFormat;
			import flash.net.URLRequest;
			import flash.events.*;
			
			import service.BmpReader;
			
			// 加载用
			private var loader:URLLoader;
			// 请求用
			private var request:URLRequest;
			
			/**
			 * 初期化。<BR>
			 */	
			private function init():void {
				loader = new URLLoader();
				request = new URLRequest("**.bmp");
				loader.dataFormat = URLLoaderDataFormat.BINARY;
				loader.addEventListener(Event.COMPLETE, onCompleteHandler);
            	loader.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
				loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError);
			}
			
			/**
			 * 加载图片。<BR>
			 */	
			private function load():void {
				try{
            		loader.load(request);
				} catch(error:Error) {
					trace("Request" + error);
				}
			}
			
			/**
			 * 加载完成后处理。<BR>
			 */
			private function onCompleteHandler(e:Event):void {
				trace("load Complete");
				var byteArray:ByteArray = ByteArray(e.currentTarget.data);
				var bitMap:Bitmap = new Bitmap(BmpReader.read(byteArray));
				bitMap.width = 400;
				bitMap.height = 300;
				image.source = bitMap;
			}
			
			/**
			 * 安全错误处理。<BR>
			 */
			private function onSecurityError(securityError: SecurityErrorEvent):void {
				trace("securityError");
			}
			
			/**
			 * IO错误处理。<BR>
			 */
			private function onIOError(ioError: IOErrorEvent):void {
				trace("ioError");
			}
			
		]]>
	</mx:Script>
	
	<!-- GUI -->
	<mx:Image id="image" x="10" y="10" width="400" height="300"/>
	<mx:Button x="10" y="332" label="Show BMP" click="load()"/>
	
</mx:Application>
 对bmp格式感兴趣的朋友,可参考:http://www.umekkii.jp/data/computer/file_format/bitmap.cgi
分享到:
评论

相关推荐

    FLEX中显示类型为BMP的图片

    然而,Flex的原生支持主要针对JPEG和PNG等更现代的图像格式,因此要显示BMP图片,我们需要自定义解码和渲染过程。 这篇名为“FLEX中显示类型为BMP的图片”的博客文章提供了如何在Flex应用中处理BMP图像的方法。首先...

    Flex读取txt文本

    本文主要关注的是使用Flex技术来读取TXT文本文件。Flex是一种基于ActionScript的开放源码框架,主要用于构建富互联网应用程序(RIA)。通过Flex,开发者可以使用XML、CSS和ActionScript等技术,创建具有动态图形和...

    flex读取本地的shapefile文件

    在GIS(地理信息系统)领域,Shapefile是一种广泛使用的矢量数据格式,用于存储地理空间信息。Flex,作为Adobe开发的开源ActionScript库,主要用于构建富互联网应用(RIA),尤其是在地图和地理信息系统应用中。本篇...

    FLEX 读取Excel

    在本主题中,我们将探讨如何使用FLEX来读取Excel文件并展示其数据,甚至将其传送到后台数据库进行存储。 首先,要实现FLEX读取Excel文件,我们需要借助第三方库,如As3Xlsx或Zap2It。这些库允许FLEX应用程序解析...

    Flex读取excel

    ### Flex读取与写入Excel知识点详解 #### 一、引言 在处理大量数据时,Excel文件常常作为数据交换的标准格式。对于Flex开发者来说,能够有效地读取和写入Excel文件是一项重要的技能。本文将深入探讨如何使用Flex...

    flex读取xml乱码的解决方法

    在探讨“Flex读取XML乱码的解决方法”这一主题时,我们首先需要理解几个关键概念:Flex框架、XML文件以及编码问题。Flex是一种用于构建跨平台桌面应用程序和移动应用程序的强大框架,它由Adobe Systems开发并开源。...

    flex 读取pdf文件

    本主题聚焦于如何使用Flex和ActionScript来读取并处理PDF文件,实现诸如放大、缩小和分页等常见功能。 首先,我们要理解Flex中的PDF阅读器的基本架构。Flex应用程序通常由MXML和ActionScript代码组成,其中MXML用于...

    flex读取excel文件

    在Flex开发中,有时我们需要与Excel文件进行交互,例如读取数据或导出数据。本文将详细介绍如何在Flex 4.6环境下,利用FlashPlayer 11读取Excel文件。Flex是一个基于ActionScript 3.0的开源框架,主要用于创建富...

    Flex读取XML不刷新问题

    ### Flex读取XML不刷新问题解析 在Flex应用开发中,常常会遇到读取XML数据时出现不刷新的问题。这不仅影响用户体验,也可能导致数据处理出现异常情况。本文将从多个角度深入分析此问题,并提供可能的解决方案。 ##...

    flex读取excel(含中文字符)的解决

    本文将探讨如何在Adobe Flex中读取包含中文字符的Excel文件,主要涉及使用AS3XLS库来解决这个问题。 首先,AS3XLS是一个ActionScript 3的开源库,专门用于处理Microsoft Excel文件。它允许Flex应用程序创建、读取和...

    flex+spring图片上传及预览

    在处理bmp图片时,由于bmp格式通常较大且不适用于网络传输,我们可能需要将其转换为更高效的格式,如JPEG或PNG。在Java中,我们可以使用ImageIO库进行图片格式转换。首先读取bmp图像,然后创建一个新的ImageWriter...

    Flex相册 Flex图片

    Flex相册 Flex图片

    flex svg代码生成图片

    使用 SvgPath 类可以将 SVG 文件转换为 Flex 可以识别的格式,然后生成图片。SvgPath 类提供了 show 方法,可以将 SVG 文件显示出来。 六、Flex 与 SVG 的集成 Flex 与 SVG 的集成可以实现动态加载 SVG 图片。使用...

    Flex 代码格式化

    Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex 代码格式化Flex ...

    Flex4.6+java+servlet上传图片例子+图片上传预览

    为了实现图片上传,Flex前端可能会使用FileReference类,它提供了读取本地文件并上传到服务器的能力。FileReference对象可以监听“uploadCompleteData”事件,当文件上传成功时触发。同时,通过Flash Player的...

    flex 两个图片播放小程序

    在这个“flex 两个图片播放小程序”项目中,我们可以看到它被用来创建一个图片浏览应用,支持图片的放大和缩小功能,提供了用户友好的交互体验。接下来,我们将深入探讨Flex在图片浏览中的应用及其关键技术。 首先...

    FlexBuilder代码格式化方法

    标题“FlexBuilder代码格式化方法”涉及到的是在Adobe Flex Builder这款集成开发环境中如何对ActionScript和MXML代码进行美化和格式化的技术。Flex Builder是一款基于Eclipse的IDE,专门用于构建富互联网应用程序...

    flex加载动态图片

    flexBulider页面加载动态图片的显示

    FLex 左右滑动图片墙

    在本文中,我们将深入探讨如何使用Adobe Flex技术创建一个具有左右滑动功能的图片墙。Flex是一种基于ActionScript 3(AS3)的开源框架,主要用于构建富互联网应用程序(RIA)。通过利用Flex,开发者可以轻松地创建...

    Flex读取xml文件几种方法

    ### Flex读取XML文件的几种方法 在Flex开发过程中,经常需要处理XML数据。XML(Extensible Markup Language)是一种标记语言,被广泛用于结构化文档和数据存储。Flex提供了多种方式来读取和解析XML文件,包括使用`...

Global site tag (gtag.js) - Google Analytics