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

Flex中ByteArray与BitmapData互相转换实现图片的二进制保存与复

发布时间:2020-12-15 01:04:48 所属栏目:百科 来源:网络整理
导读:? import ? flash.display.Bitmap;? ? ? import ? flash.display.BitmapData;? ? ? import ? flash.geom.Rectangle;? ? ? import ? flash.utils.ByteArray;? ? ? import ? mx.core.UIComponent;? ? ? public ? class ? BitmapBytes? ? ? {? ? ? public ? fun
?
  1. import?flash.display.Bitmap;???
  2. import?flash.display.BitmapData;???
  3. import?flash.geom.Rectangle;???
  4. import?flash.utils.ByteArray;???
  5. import?mx.core.UIComponent;???
  6. public?class?BitmapBytes???
  7. {???
  8. public?function?BitmapBytes()???
  9. {???
  10. super();???
  11. }???
  12. //将可视的UIComponent组件转换为ByteArray数组,我就是在UIComponent那里放了一个图片? ??
  13. public?static?function?BitmapDataToByteArray(target?:?UIComponent):ByteArray{???
  14. var?imageWidth:uint?=?target.width;???
  15. var?imageHeight:uint?=?target.height;???
  16. var?srcBmp:BitmapData?=?new?BitmapData(?imageWidth,?imageHeight?);???
  17. //将组件读取为BitmapData对象,bitmagData的数据源????
  18. srcBmp.draw(?target?);???
  19. //getPixels方法用于读取指定像素区域生成一个ByteArray,Rectangle是一个区域框,就是起始坐标? ??
  20. var?pixels:ByteArray?=?srcBmp.getPixels(?new?Rectangle(0,imageWidth,imageHeight)?);???
  21. //下面俩行将数据源的高和宽一起存储到数组中,为翻转的时候提供高度和宽度? ??
  22. pixels.writeShort(imageHeight);???
  23. pixels.writeShort(imageWidth);???
  24. return?pixels;???
  25. }???
  26. //次方法的参数必须是像上面的ByteArray形式一样的,即需要对象的大小;? ??
  27. //此方法返回的Bitmap可以直接赋值给Image的source属性? ??
  28. public?static?function?ByteArrayToBitmap(byArr:ByteArray):Bitmap{???
  29. if(byArr==null){???
  30. ????return?null;???
  31. }???
  32. //读取出存入时图片的高和宽,因为是最后存入的数据,所以需要到尾部读取? ??
  33. var?bmd:ByteArray=?byArr;???
  34. bmd.position=bmd.length-2;???
  35. var?imageWidth:int?=?bmd.readShort();???
  36. bmd.position=bmd.length-4;???
  37. var?imageHeight:int=?bmd.readShort();???
  38. var?copyBmp:BitmapData?=?new?BitmapData(?imageWidth,?imageHeight,?true?);???
  39. //利用setPixel方法给图片中的每一个像素赋值,做逆操作? ??
  40. //ByteArray数组从零开始存储一直到最后都是图片数据,因为读入时的高和宽都是一样的,所以当循环结束是正好读完? ??
  41. bmd.position?=?0;???
  42. for(?var?i:uint=0;?i<imageHeight?;?i++?)???
  43. {???
  44. ????for(?var?j:uint=0;?j<imageWidth;?j++?)???
  45. ????{???
  46. ??????copyBmp.setPixel(?j,?i,?bmd.readUnsignedInt()?);???
  47. ????}???
  48. }???
  49. var?bmp:Bitmap?=?new?Bitmap(?copyBmp?);???
  50. return?bmp;???
  51. }???
  52. }???
  53. }???
  54. 以下是mxml文件,只是我做测试用的没有进行序列化,有需要的留言给我,???
  55. <?xml?version="1.0"?encoding="utf-8"?>???
  56. <mx:WindowedApplication?xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute">???
  57. <mx:Script>???
  58. <![CDATA[???
  59. import?com.kyit.lg.util?.BitmapBytes;???
  60. private?var?byteArr:ByteArray;???
  61. ????internal?function?copyToTar():void{???
  62. ??????????//这俩个方法都是静态的,因为项目当中常用 ??
  63. ??????????byteArr=BitmapBytes.BitmapDataToByteArray(sorImg);???
  64. ??????????tarImg.source=BitmapBytes.ByteArrayToBitmap(byteArr);???
  65. }???
  66. ??
  67. ]]>???
  68. </mx:Script>???
  69. ????<mx:Image?x="33"?y="56"?id="sorImg"?source="a.jpg"/>???
  70. ????<mx:Image?x="33"?y="265"?id="tarImg"?/>???
  71. ????<mx:Button?x="33"?y="26"?label="a1"?click="copyToTar();"?/>???
  72. </mx:WindowedApplication>??

(编辑:李大同)

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

    推荐文章
      热点阅读