同系列文章:
用户通过浏览器将图像数据上传到服务器,然后由服务器下发到嵌入式设备。设备只能显示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(); } } }