通过浏览器下发图像到设备(一)Flex实现上传图像编码

同系列文章:

用户通过浏览器将图像数据上传到服务器,然后由服务器下发到嵌入式设备。设备只能显示16位Bitmap图像。
下面为在浏览器端基于Flex实现的上传图像编码:

/* ----------------------------------------------------------
* 文件名称:BitmapUtil.as
* 
* 作者:秦建辉
* 
* MSN:splashcn@msn.com
* QQ:36748897
* 
* 博客:http://www.firstsolver.com/wordpress/
* 
* 开发环境:
*      Adobe Flash Builder 4.6
*      
* 版本历史:              
*      V1.0	2012年07月30日
*      		24位图像内容转换为16位图像数据,并以Base64编码字符串输出
------------------------------------------------------------ */
package Splash
{
	import flash.display.BitmapData;
	import flash.utils.ByteArray;
	
	import mx.utils.Base64Encoder;
	
	public class BitmapUtil
	{	
		// 将24位图像内容转换为16位图像数据,并以Base64编码字符串输出
		public static function Bgr24ToBgr565(bmd:BitmapData, isBigEndian:Boolean = false):String
		{	// Bgr565格式为 RRRRR GGGGGG BBBBB
			var Data:ByteArray = new ByteArray();
			Data.length = (bmd.height * bmd.width) << 1;
			var index:int = 0;
			for(var y:int = 0; y < bmd.height; y++)
			{
				for(var x:int = 0; x < bmd.width; x++)
				{	// 获取像素值
					var color:uint = bmd.getPixel(x, y);
					
					// 转换Bgr24到Bgr565
					if(isBigEndian)
					{	// 第一字节为高字节
						Data[index++] = (((color >> 19) & 0x1f) << 3) | ((color >> 13) & 7);
						Data[index++] = (((color >> 10) & 7) << 5) | ((color >> 3) & 0x1f);				
					}
					else
					{	// 第一字节为低字节
						Data[index++] = (((color >> 10) & 7) << 5) | ((color >> 3) & 0x1f);
						Data[index++] = (((color >> 19) & 0x1f) << 3) | ((color >> 13) & 7);
					}				
				}	
			}
			
			// 转换为Base64编码字符串
			var encoder:Base64Encoder = new Base64Encoder();
			encoder.encodeBytes(Data, 0, index);
			
			return encoder.toString();				
		}
		
		// 将24位图像内容转换为16位图像数据,并以Base64编码字符串输出
		public static function Bgr24ToBgr555(bmd:BitmapData, isBigEndian:Boolean = false):String
		{	// Bgr555格式为  X RRRRR GGGGG BBBBB
			var Data:ByteArray = new ByteArray();
			Data.length = (bmd.height * bmd.width) << 1;
			var index:int = 0;
			for(var y:int = 0; y < bmd.height; y++)
			{
				for(var x:int = 0; x < bmd.width; x++)
				{	// 获取像素值
					var color:uint = bmd.getPixel(x, y);
					
					// 转换Bgr24到Bgr555
					if(isBigEndian)
					{	// 第一字节为高字节
						Data[index++] = (((color >> 19) & 0x1f) << 2) | ((color >> 14) & 3);
						Data[index++] = (((color >> 11) & 7) << 5) | ((color >> 3) & 0x1f);				
					}
					else
					{	// 第一字节为低字节
						Data[index++] = (((color >> 11) & 7) << 5) | ((color >> 3) & 0x1f);
						Data[index++] = (((color >> 19) & 0x1f) << 2) | ((color >> 14) & 3);
					}				
				}	
			}
			
			// 转换为Base64编码字符串
			var encoder:Base64Encoder = new Base64Encoder();
			encoder.encodeBytes(Data, 0, index);
			
			return encoder.toString();				
		}
	}
}

Comments are closed.