加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 读取 bmp 格式的图片

发布时间:2020-12-15 03:38:34 所属栏目:百科 来源:网络整理
导读:Flex 读取 bmp 格式的图片 博客分类: ? Flex ? ? ? 现在要求把后台bmp格式的图片,在flash中显示。如大家所知的,Flash已经内置了对jgp,png,gif图片的支持。不知道Adobe怎么想的,为啥不支持bmp呢。唉,bmp真是个苦命的孩子

Flex 读取 bmp 格式的图片

    博客分类:?
  • Flex
?

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

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

AS3.0代码

Java代码??

收藏代码

  1. package?service??
  2. {??
  3. ????import?flash.display.BitmapData;??
  4. import?flash.utils.ByteArray;??
  5. import?flash.utils.Endian;??
  6. ??????
  7. ????/**?
  8. ?????*?读取24位的BitMap用类。<BR>?
  9. ?????*/??
  10. public?class?BmpReader?{??
  11. ??????????
  12. ?????????????????*?构造函数。<BR>?
  13. ?????????*/??
  14. ????????public?function?BmpReader(){??
  15. ????????????super();??
  16. ????????}??
  17. ?????????*?读取24位的BitMap。<BR>?
  18. static?function?read(byteArray:ByteArray):BitmapData?{??
  19. try?{??
  20. ????????????????//?设置字节序??
  21. ????????????????byteArray.endian?=?Endian.LITTLE_ENDIAN;??
  22. ??????????????????
  23. //?读取2字节,'BM'`对用十六进制为4D42,转化为十进制为19778??
  24. ????????????????if(byteArray.readUnsignedShort()?==?19778)?{??
  25. ??????????????????????
  26. ????????????????????//?跳到表示图片从头到图像数据的偏移量的字节??
  27. ????????????????????byteArray.position?=?10;??
  28. ????????????????????var?offset:int?=?byteArray.readInt();??
  29. //?跳到表示图片宽和高的字节??
  30. 18;??
  31. ????????????????????var?imageWidth:Number?=?byteArray.readInt();??
  32. ????????????????????var?imageHeight:Number?=?byteArray.readInt();??
  33. //?跳到表示图片位数的字节??
  34. 28;??
  35. ????????????????????var?biBitCount:int?=?byteArray.readUnsignedShort();??
  36. //?本类仅处理24位bmp??
  37. ????????????????????if(biBitCount?!=?24)?{??
  38. ????????????????????????trace("Image?Format?Error");??
  39. ????????????????????????return?null;??
  40. ????????????????????}??
  41. ????????????????????var?bitmapData:BitmapData?=?new?BitmapData(imageWidth,?imageHeight,?false,?0x00FFFFFF);??
  42. ????????????????????var?px:int?=?0;??
  43. ????????????????????var?py:int?=?imageHeight;??
  44. ????????????????????var?rColor: ????????????????????var?gColor: ????????????????????var?bColor://?补齐用字节数??
  45. ????????????????????var?junkbyte:int=?4?-?((imageWidth?*?3)?%?4);??
  46. while(py?>=?0)?{??
  47. ????????????????????????px?=?1;??
  48. while(px?<=?imageWidth)?{??
  49. ????????????????????????????if(byteArray.bytesAvailable?>?3)?{??
  50. ????????????????????????????????bColor?=?byteArray.readUnsignedByte();??
  51. ????????????????????????????????gColor?=?byteArray.readUnsignedByte();??
  52. ????????????????????????????????rColor?=?byteArray.readUnsignedByte();??
  53. ????????????????????????????????bitmapData.setPixel(px-1,?py-256*256*rColor+256*gColor+bColor);??
  54. ????????????????????????????}??
  55. ????????????????????????????px++;??
  56. ????????????????????????}??
  57. ????????????????????????//?跳过格式补齐用字节??
  58. ????????????????????????junkByteCheck(byteArray,junkbyte);??
  59. ????????????????????????py--;??
  60. ????????????????}?else?{??
  61. ????????????????????trace("Image?Format?Error");??
  62. ????????????????}??
  63. ????????????}?catch?(err:Error){??
  64. ????????????????trace(err.getStackTrace());??
  65. ????????????}??
  66. ??????????????
  67. return?bitmapData;??
  68. ?????????*?跳过格式补齐用字节。<BR>?
  69. private?static?function?junkByteCheck(byteArray:ByteArray,?junkbyte:int):void?{??
  70. ????????????var?bavailable:int=byteArray.bytesAvailable;??
  71. if?((junkbyte>0?&&?junkbyte?<?4)?&&?(bavailable?>=?junkbyte)){??
  72. for?(var?i:int;?i<junkbyte;?i++){??
  73. ????????????????????byteArray.readUnsignedByte();??
  74. ????????????}else{??
  75. return??
  76. ??
  77. ????}??
  78. }??

?Flex mxml代码

Xml代码??

收藏代码

    <?xml?version="1.0"?encoding="utf-8"?>??
  1. <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"??
  2. ????layout="absolute"?creationComplete="init()">??
  3. ????mx:Script ????????<![CDATA[?
  4. ????????????import?flash.net.URLLoader;?
  5. ????????????import?flash.net.URLLoaderDataFormat;?
  6. ????????????import?flash.net.URLRequest;?
  7. ????????????import?flash.events.*;?
  8. ?????????????
  9. ????????????import?service.BmpReader;?
  10. ????????????//?加载用?
  11. ????????????private?var?loader:URLLoader;?
  12. ????????????//?请求用?
  13. ????????????private?var?request:URLRequest;?
  14. ????????????/**?
  15. ?????????????*?初期化。<BR>?
  16. ?????????????*/??
  17. ????????????private?function?init():void?{?
  18. ????????????????loader?=?new?URLLoader();?
  19. ????????????????request?=?new?URLRequest("**.bmp");?
  20. ????????????????loader.dataFormat?=?URLLoaderDataFormat.BINARY;?
  21. ????????????????loader.addEventListener(Event.COMPLETE,?onCompleteHandler);?
  22. ????????????????loader.addEventListener(IOErrorEvent.IO_ERROR,onIOError);?
  23. ????????????????loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError);?
  24. ????????????}?
  25. ?????????????*?加载图片。<BR>?
  26. ????????????private?function?load():void?{?
  27. ????????????????try{?
  28. ????????????????????loader.load(request);?
  29. ????????????????}?catch(error:Error)?{?
  30. ????????????????????trace("Request"?+?error);?
  31. ????????????????}?
  32. ?????????????*?加载完成后处理。<BR>?
  33. ?????????????*/?
  34. ????????????private?function?onCompleteHandler(e:Event):void?{?
  35. ????????????????trace("load?Complete");?
  36. ????????????????var?byteArray:ByteArray?=?ByteArray(e.currentTarget.data);?
  37. ????????????????var?bitMap:Bitmap?=?new?Bitmap(BmpReader.read(byteArray));?
  38. ????????????????bitMap.width?=?400;?
  39. ????????????????bitMap.height?=?300;?
  40. ????????????????image.source?=?bitMap;?
  41. ?????????????*?安全错误处理。<BR>?
  42. ????????????private?function?onSecurityError(securityError:?SecurityErrorEvent):void?{?
  43. ????????????????trace("securityError");?
  44. ?????????????*?IO错误处理。<BR>?
  45. ????????????private?function?onIOError(ioError:?IOErrorEvent):void?{?
  46. ????????????????trace("ioError");?
  47. ????????]]>??
  48. </ ????<!--?GUI?-->??
  49. mx:Image?id="image"?x="10"?y="10"?width="400"?height="300"/>??
  50. mx:Button?x="10"?y="332"?label="Show?BMP"?click="load()"mx:Application>??
?对bmp格式感兴趣的朋友,可参考: http://www.umekkii.jp/data/computer/file_format/bitmap.cgi

引自:http://hanyi366.iteye.com/blog/1580748#comments

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读