2013-06-19 65 views
1

我试图将照片保存为SQLite中的blob(不仅仅是引用它)。 mCurrentMediaPath是照片将被存储的当前路径。现在,我需要保存到数据库后图片拍摄和保存按钮按下(我猜意图后)。如何将android数据库中的照片保存为blob

public Uri insert(byte[] image) { 
    return getContentResolver().insert(MyContentProvider.CONTENT_URI7, createContentValues(image)); 
} 
private ContentValues createContentValues(byte[] image) { 
    ContentValues docsInsert = new ContentValues(); 
    docsInsert.put(Db.COLUMN_FILETYPE, "PHOTO"); 
    docsInsert.put(Db.COLUMN_NAME, mCurrentMediaPath); 
    docsInsert.put(Db.COLUMN_FILE, image); 
    return docsInsert; 
} 
// convert from bitmap to byte array 
public byte[] getBytesFromBitmap(Bitmap bitmap) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(CompressFormat.JPEG, 70, stream); 
    return stream.toByteArray(); 
} 


private void dispatchMediaIntent(int actionCode) { 
    switch(actionCode) { 
    case ACTION_TAKE_PHOTO: 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     File f = null; 
     try { 
      f = setUpPhotoFile(ACTION_TAKE_PHOTO); 
      mCurrentMediaPath = f.getAbsolutePath(); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      f = null; 
      mCurrentMediaPath = null; 
     } 
     startActivityForResult(takePictureIntent, actionCode); 
     break; 
    case ACTION_TAKE_VIDEO: 
     Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     startActivityForResult(takeVideoIntent, actionCode); 
     break; 
    default: 
     break;   
    }  
} 

我应该在哪里实施插入?

 //SAVING TO DATABASE 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(mCurrentMediaPath, bmOptions); 
     Bitmap bitmap = BitmapFactory.decodeFile(mCurrentMediaPath, bmOptions); 

     insert(getBytesFromBitmap(bitmap)); 
+0

存储图像的数据库的路径,而不是存储图像为BLOB – Raghunandan

+0

请阅读我的文章的第一行。 – user2224135

+0

如果你有大量的图像存储在数据库中占用更多的空间。相反,您可以存储图像的路径。 – Raghunandan

回答

1

创建位图图像的再

Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f), null, null); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

dba.open(); 

dba.insertPhoto(byteArray); 

其中DBA是数据库类的对象。

创建数据库类如表:

private static final String CREATETABLE_PHOTO = "create table eqpphoto("EImage BLOB " + ");"; 

public static final String TABLE_PHOTO = "eqpphoto"; 

public long insertPhoto(byte[] EImage) { 

    try { 
     System.out.println("Function call : "); 
     ContentValues values = new ContentValues(); 

     values.put(EIMAGE, EImage); 
     return db.insert(TABLE_PHOTO, null, values); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return 0; 
    } 
} 
+0

你是如何声明“bmp”的? – user2224135

+0

检查我编辑的答案.. – Riser

+0

关于我的大部分,在“dispatchMediaIntent”方法中你会实现它吗?由于Bitmap变量仍然为空。 – user2224135

相关问题