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

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读