編輯:關於Android編程
Android數據庫中存取圖片通常使用兩種方式,一種是保存圖片所在路徑,二是將圖片以二進制的形式存儲(sqlite3支持BLOB數據類型)。對於兩種方法的使用,好像第二種方法不如第一種方法更受程序員歡迎,他們認為,在很多數據庫語言裡,處理大字段都是不容易的,像圖片這樣的文件放在數據庫裡會有問題:對數據庫的讀寫速度永遠趕不上文件系統的處理速度,使數據庫變得巨大;但也有很多人認為像圖片這樣的數據存放在數據庫中也有好處:易於備份,且備份速度絕對比備份文件快,比較容易數據遷移等等。其實這兩種方法都有優缺點,具體使用哪種方法要視情況而定。個人傾向於使用數據庫存取圖片,因為個人認為存到數據庫裡的數據不會因外部數據的變化而丟失改變,比如你拍照獲得一張圖片,如果是將路徑存到數據庫,當這張照片被刪除之後,下次讀取數據庫就得不到想要的結果了。接下來詳細介紹數據庫存取圖片的方法:
1、把圖片轉換為字節
private byte[]img(Bitmap bitmap){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); }
2、把圖片存儲到數據庫
假設獲取的圖片為bitmap,數據庫有一張User表,存儲的屬性為byte[]headshot
public class User extends DataSupport { private byte[] headshot;//頭像 public User(){ super(); } public User(byte[]headshot){ super(); this.headshot=headshot; } public byte[] getHeadshot() { return headshot; } public void setHeadshot(byte[] headshot) { this.headshot = headshot; } }
對圖片進行保存
//獲取到圖片 Bitmap headShot=BitmapFactory.decodeFile(imagePath); //把圖片轉換字節流 byte[]images=img(headShot); //找到用戶 User users=DataSupport.findFirst(User.class); //保存 users.setHeadshot(images); users.save();
4、獲取圖片
User mUser=DataSupport.findFrist(User.class); byte[]images=mUser.getHeadshot(); Bitmap bitmap=BitmapFactory.decodeByteArray(images,0,images.length);
好了,到此完成對數據庫存取圖片。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
先給大家展示下效果圖,大家覺效果滿意,請參考實現代碼。直接上代碼:private void setDialog(){View view = getLayoutInflat
原因:編譯器版本的問題。Java 1.5的編譯器默認對父類的方法進行覆蓋,采用@Override進行說明;但1.6已經擴展到對接口的方法;所以如果還是以Java 1.5
效果圖自定義代碼public class BezierView extends View { Paint paint;//畫筆 Path path;//路徑
貝塞爾曲線開發的藝術一句話概括貝塞爾曲線:將任意一條曲線轉化為精確的數學公式。很多繪圖工具中的鋼筆工具,就是典型的貝塞爾曲線的應用貝塞爾曲線中有一些比較關鍵的名詞,解釋如