如何将照片保存在android数据库中作为blob

时间:2013-06-19 12:24:37

标签: android android-intent blob bitarray

我正在尝试将照片保存为SQLite中的blob(不仅仅是引用它)。 mCurrentMediaPath是存储照片的当前路径。现在,我需要在拍摄照片后将其保存到数据库并按下保存按钮(我想在意图之后)。

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));

1 个答案:

答案 0 :(得分: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;
    }
}