Flex中利用ByteArray與BitmapData互相轉換實現圖片的二進制保存與復原

Flex中利用ByteArray與BitmapData互相轉換實現圖片的二進制保存與復原?
近 日在項目當中需要將圖片保存到共享對象當中,開始用了倆天的時間做了對象的序列化,并以BitmapData的形式進行了圖片的序列化保存共享,因為系統 沒有提供更好的接口所以無法測試,前天寫好了測試代碼,結果對象的其他類型的屬性都可以訪問了,但圖片就是復原不了,到各大論天,技術網站考究了一天也沒 有答案,?
只有“KingLong's”的“[AS3]BitmapBytes類-實現BitmapData與 ByteArray(Base64)之間互轉功能”一篇文章,看了半天,研究了半天,結果他把一個核心的類沒有公開,我發了幾次請求人家都沒有給回,失敗 啊!無奈自己多花一點時間吧,這個是必須解決的。研究倆天終于在下午四點成功了,心情甚爽,晚上還改善了生活!?
? 此問題在網上問的人太多了,但是高手就是覺得自己牛逼,不告訴你,菜鳥需要幾天的時間甚至還會以失敗告終,所以我今天貼出來供大家參考。轉載請注明出處!!!謝謝合作?
此類可以將一個可是組件讀取為圖像,并且以二進制形式進行序列化共享,還提供了二進制讀取為Bitmap的方法,將圖片的source屬性直接賦值為本方法就可以了。此方法flex項目當中防止圖片鏈接斷開的最好解決辦法。?
注:本人水平太差,不知道怎樣得出此方法的圖片壓縮和存儲效率,僅是實現了功能!?
下面是完整的類?

 1 package com.kyit.lg..util 
 2 { /* 
 3   author:李廣業 
 4   */ 
 5 import flash.display.Bitmap; 
 6 import flash.display.BitmapData; 
 7 import flash.geom.Rectangle; 
 8 import flash.utils.ByteArray; 
 9 import mx.core.UIComponent; 
10 public class BitmapBytes 
11 { 
12   public function BitmapBytes() 
13   { 
14   super(); 
15   } 
16   //將可視的UIComponent組件轉換為ByteArray數組,我就是在UIComponent那里放了一個圖片 
17   public static function BitmapDataToByteArray(target : UIComponent):ByteArray{ 
18   var imageWidth:uint = target.width; 
19   var imageHeight:uint = target.height; 
20   var srcBmp:BitmapData = new BitmapData( imageWidth, imageHeight ); 
21   //將組件讀取為BitmapData對象,bitmagData的數據源 
22   srcBmp.draw( target ); 
23   //getPixels方法用于讀取指定像素區域生成一個ByteArray,Rectangle是一個區域框,就是起始坐標 
24   var pixels:ByteArray = srcBmp.getPixels( new Rectangle(0,0,imageWidth,imageHeight) ); 
25   //下面倆行將數據源的高和寬一起存儲到數組中,為翻轉的時候提供高度和寬度 
26   pixels.writeShort(imageHeight); 
27   pixels.writeShort(imageWidth); 
28   return pixels; 
29   } 
30   //次方法的參數必須是像上面的ByteArray形式一樣的,即需要對象的大小; 
31   //此方法返回的Bitmap可以直接賦值給Image的source屬性 
32   public static function ByteArrayToBitmap(byArr:ByteArray):Bitmap{ 
33   if(byArr==null){ 
34     return null; 
35   } 
36   //讀取出存入時圖片的高和寬,因為是最后存入的數據,所以需要到尾部讀取 
37   var bmd:ByteArray= byArr; 
38   bmd.position=bmd.length-2; 
39   var imageWidth:int = bmd.readShort(); 
40   bmd.position=bmd.length-4; 
41   var imageHeight:int= bmd.readShort(); 
42   var copyBmp:BitmapData = new BitmapData( imageWidth, imageHeight, true ); 
43   //利用setPixel方法給圖片中的每一個像素賦值,做逆操作 
44   //ByteArray數組從零開始存儲一直到最后都是圖片數據,因為讀入時的高和寬都是一樣的,所以當循環結束是正好讀完 
45   bmd.position = 0; 
46   for( var i:uint=0; i<imageHeight ; i++ ) 
47   { 
48     for( var j:uint=0; j<imageWidth; j++ ) 
49     { 
50       copyBmp.setPixel( j, i, bmd.readUnsignedInt() ); 
51     } 
52   } 
53   var bmp:Bitmap = new Bitmap( copyBmp ); 
54   return bmp; 
55   } 
56 } 
57 } 

?


以下是mxml文件,只是我做測試用的沒有進行序列化,有需要的留言給我,?

 1 <?xml version="1.0" encoding="utf-8"?> 
 2 <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
 3 <mx:Script> 
 4 <![CDATA[ 
 5   import com.kyit.lg.util .BitmapBytes; 
 6   private var byteArr:ByteArray; 
 7     internal function copyToTar():void{ 
 8           //這倆個方法都是靜態的,因為項目當中常用 
 9           byteArr=BitmapBytes.BitmapDataToByteArray(sorImg); 
10           tarImg.source=BitmapBytes.ByteArrayToBitmap(byteArr); 
11   } 
12   
13 ]]> 
14 </mx:Script> 
15     <mx:Image x="33" y="56"  id="sorImg" source="a.jpg"/> 
16     <mx:Image x="33" y="265"  id="tarImg" /> 
17     <mx:Button x="33" y="26" label="a1" click="copyToTar();" /> 

?

出自:http://bbs.9ria.com/blog-239-2704.html

轉載于:https://www.cnblogs.com/ztdy/p/3617026.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376047.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java8自定義收集器_使用自定義收集器進行Java 8分組?

我有以下課程。class Person {String name;LocalDate birthday;Sex gender;String emailAddress;public int getAge() {return birthday.until(IsoChronology.INSTANCE.dateNow()).getYears();}public String getName() {return name;}}我希望能夠按年齡分組&#xff0c;然后收…

poj 1862 Stripies/優先隊列

原題鏈接&#xff1a;http://poj.org/problem?id1862 簡單題&#xff0c;貪心優先隊列主要練習一下stl大根堆 寫了幾種實現方式寫成類的形式還是要慢一些。。。 手打的heap&#xff1a; 1&#xff1a; 1 #include<cstdio>2 #include<cstdlib>3 #include<cmath&…

java url下載ics_使用Microsoft Graph API處理外部(Internet / .ics)日歷URL

在新的Graph API中&#xff0c;是否可以根據外部.ics日歷網址為用戶創建新日歷&#xff1f;我d like to do is to use a daemon to inject a link to an external calendar into the list of calendars a user has if they don已經有了這樣一個鏈接 . 這將有效地復制用戶可以在…

命令行生成jar文件

1.打開cmd&#xff0c;進入編譯完后所有類的當前目錄 命令行 jar -cvf javaname.jar *.class 這時已經生成了 javaname.jar 不過如果有多個類&#xff0c;雙擊打不開 2.解壓javaname.jar 進入META-INF&#xff0c;編輯MANIFEST.MF: 尾行寫入Main-Class:&#xff08;&…

Github鏈接地址

https://github.com/kzj1/test轉載于:https://www.cnblogs.com/lalal/p/4456923.html

java foreach和for循環區別_java相關:老生常談foreach(增強for循環)和for的區別

java相關&#xff1a;老生常談foreach(增強for循環)和for的區別發布于 2020-8-18|復制鏈接下面小妖就為大家帶來一篇老生常談foreach(增強for循環)和for的區別。小妖覺得挺不錯的&#xff0c;現在就分享給大家&#xff0c;也給大家做個參考。一起跟隨小妖過來看看吧首先說一下f…

關于事件冒泡和捕獲的問題

由于習慣于jquery的方便操作&#xff0c;往往讓我們慢慢淡忘了原生js應有的功能和屬性&#xff0c;今天重溫一下事件冒泡和捕獲問題。 冒泡&#xff1a;從內向外&#xff0c;如&#xff1a;div > body > html (不同瀏覽器稍有不同) 捕獲&#xff1a;從外向內&#xff0c;…

root無法運行命令解決辦法

今天運行一個命令wget(wg再使用tab鍵無法使用)&#xff0c;如下提示 -bash: /usr/bin/wget: 權限不夠 [rootwww /]# ls -Z /usr/bin/wget-rw-r--r--. root root system_u:object_r:bin_t:s0 /usr/bin/wget發現沒有執行權限 chmod x /usr/bin/wget -bash: /usr/bin/wget: …

java類編寫sql_用JavaBean編寫SQL Server數據庫連接類

以下為引用的內容&#xff1a;//類conn.db.conndb.javapackage conn.db;import java.sql.*;public class conndb {Connection conn;ResultSet rs;private int count;public conndb() {try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");} catch (Exception ex) {}…

ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、

1.Request.ApplicationPath->當前應用的目錄 Jsp中, ApplicationPath指的是當前的application(應用程序)的目錄,ASP.NET中也是這個意思。 對應的--例如我的服務器上有兩個web應用域名都是mockte.com 一個映射到目錄mockte.com/1/ 另一個影射到 http://mockte.com/2/ …

java timezone id_java.util.TimeZone.setID()方法實例

全屏setID(String ID)方法被用于設置時區ID。這不會改變的時區對象中的任何其他數據。聲明以下是java.util.TimeZone.setID()方法的聲明。public void setID(String ID)參數ID--這是新的時區ID。返回值NA異常NA例子下面的例子顯示java.util.TimeZone.setID()方法的使用package …

c語言中賦值截斷

在c語言中進行變量賦值的時候&#xff0c;如果將字節多的數據類型賦給一個占字節少的變量類型&#xff0c;會發生“截斷”。 發生這種情況的原因是&#xff1a;在賦值過程中只將占字節較長的變量的地位賦給占字節較少的變量。 如&#xff1a; int i345&#xff1b; char c‘…

創建一個自己的GitHub,創建自己的開源項目

作者是一個大學在讀學生&#xff0c;自己在平時的學習中&#xff0c;GitHub上的開源項目給自己提供了很大的幫助。GitHub是目前使用最廣泛的分布式項目管理軟件&#xff0c;GitHub上面托管了許多非常優秀的開源項目。我覺得每一個從事IT行業都應該有一個屬于自己的GitHub。下面…

設計模式之行為型(1)-職責鏈模式(Chain)

設計模式之行為型(1)-職責鏈模式(Chain)轉載于:https://www.cnblogs.com/lihuali/p/7493415.html

php apache win7,win7安裝apache+php

轉自百度經驗1 系統環境與軟件1php5.5.6 下載鏈接&#xff1a;http://windows.php.net/download/#php-5.5推薦 V11 x64&#xff0c;也就是64bit的。2apache2.4&#xff0c;下載鏈接&#xff1a;http://www.apachelounge.com/download/同樣是推薦 V11&#xff0c;64位的。3前面提…

photoshop 常用快捷鍵大全

一、文件新建 CTRLN打開 CTRLO 打開為 ALTCTRLO關閉 CTRLW保存 CTRLS 另存為 CTRLSHIFTS另存為網頁格式 CTRLALTS打印設置 CTRLALTP頁面設置 CTRLSHIFTP打印 CTRLP退出 CTRLQ 二、編輯撤消 CTRLZ向前一步 CTRLSHIFTZ向后一步 CTRLALTZ退取 CTRLSHIFTF剪切 CTRLX復制 CTRLC合并…

Ubuntu如何安裝setuptools

首先百度setuptools&#xff0c;基本第一個就是官網的結果然后我們看到有兩個這樣的文件第一個不用想了&#xff0c;如果你要使用第一個的話&#xff0c;還要首先安裝wheel。我們這里直接用鼠標選中第二個zip文件&#xff0c;然后右鍵&#xff0c;復制鏈接。然后在我們的Ubuntu…

Spring MVC 文件上傳下載

本文基于Spring MVC 注解&#xff0c;讓Spring跑起來。 (1) 導入jar包&#xff1a;ant.jar、commons-fileupload.jar、connom-io.jar。 (2) 在src/context/dispatcher.xml中添加 <bean id"multipartResolver" class"org.springframework.web.multipart.comm…

.php y=mp4,PHP輸出MP4視頻流函數

function GetMp4File($file) {$size filesize($file);header(“Content-type: video/mp4”);header(“Accept-Ranges: bytes”);if(isset($_SERVER[‘HTTP_RANGE’])){header(“HTTP/1.1 206 Partial Content”);list($name, $range) explode(“”, $_SERVER[‘HTTP_RANGE’]…

JMeter學習(四)參數化、斷言、集合點

1.參數化 錄制腳本中有登錄操作&#xff0c;需要輸入用戶名和密碼&#xff0c;假如系統不允許相同的用戶名和密碼同時登錄&#xff0c;或者想更好的模擬多個用戶來登錄系統。 這個時候就需要對用戶名和密碼進行參數化&#xff0c;使每個虛擬用戶都使用不同的用戶名和密碼進行訪…