android 資料庫存取圖片

來源:互聯網
上載者:User

標籤:

Android資料庫中存取圖片通常使用兩種方式,一種是儲存圖片所在路徑,二是將圖片以二進位的形式儲存(sqlite3支援BLOB資料類型)。對於兩種方法的使用,好像第二種方法不如第一種方法更受程式員歡迎,他們認為,在很多資料庫語言裡,處理大欄位都是不容易的,像圖片這樣的檔案放在資料庫裡會有問題:對資料庫的讀寫速度永遠趕不上檔案系統的處理速度,使資料庫變得巨大;但也有很多人認為像圖片這樣的資料存放在資料庫中也有好處:易於備份,且備份速度絕對比備份檔案快,比較容易資料移轉等等。其實這兩種方法都有優缺點,具體使用哪種方法要視情況而定。個人傾向於使用資料庫存取圖片,因為個人認為存到資料庫裡的資料不會因外部資料的變化而丟失改變,比如你拍照獲得一張圖片,如果是將路徑存到資料庫,當這張照片被刪除之後,下次讀取資料庫就得不到想要的結果了。接下來詳細介紹資料庫存取圖片的方法:

  1.從資源中擷取Bitmap對象

1     Resources res = getResources();2     Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);

 

  2.把圖片轉換成位元組

1 public byte[] img(int id)2 {3      ByteArrayOutputStream baos = new ByteArrayOutputStream();4      Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap();5      bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);6      return baos.toByteArray();7 }

 

  3.在資料庫中插入圖片

//在資料庫建立時,圖片欄位的資料類型儲存為 BLOB資料庫插入操作public void onCreate(SQLiteDatabase db){     String sql = "create table " + TB_NAME + " ( " + ID + " integer primary key , " + IMAGE + " BLOB ) ";    db.execSQL(sql);} //將圖片一位元組形式儲存資料庫讀取操作public long insert(byte[] img) {     SQLiteDatabase db = getWritableDatabase();    ContentValues cv = new ContentValues();    cv.put(IMAGE, img);    long result = db.insert(TB_NAME, null, cv);    return result;}

 

  4.擷取存入資料庫的圖片(Bitmap)

public Bitmap getBmp(int position) {    SQLiteDatabase db = getReadableDatabase();    Cursor cursor = select(TB_NAME);    cursor.moveToPosition(position);    byte[] in = cursor.getBlob(cursor.getColumnIndex(IMAGE));    Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length);    return bmpout;}

  //imgView.setImageBitmap(bm);

  5.轉換擷取的圖片(Bitmap)為Drawable

1 public Drawable chage_to_drawable(Bitmap bp)2 {3     //因為BtimapDrawable是Drawable的子類,最終直接使用bd對象即可。4     Bitmap bm=bp; 5     BitmapDrawable bd= new BitmapDrawable(getResource(), bm); 6     return bd;7 }

android 資料庫存取圖片

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.