如何保存在android系统数据库中的照片作为一个blob作为一个、数据库中、存在、照片

2023-09-07 03:31:18 作者:童话,仅仅是童年的笑话の现实,仅仅是现在的实际

我想保存的照片作为SQLite的(不只是引用它)的BLOB。 mCurrentMediaPath是当前所在的路径照片将被保存。现在,我需要拍摄照片后,将其保存到数据库中,并保存按钮pressed(我猜的意图后)。

 公众开放的插入(字节[]图像){    返回getContentResolver()插入(MyContentProvider.CONTENT_URI7,createContentValues​​(图片))。}私人ContentValues​​ createContentValues​​(字节[]图像){    ContentValues​​ docsInsert =新ContentValues​​();    docsInsert.put(Db.COLUMN_FILETYPE,PHOTO);    docsInsert.put(Db.COLUMN_NAME,mCurrentMediaPath);    docsInsert.put(Db.COLUMN_FILE,图像);    返回docsInsert;}//从位图转换为字节数组公众的byte [] getBytesFromBitmap(位图位图){    ByteArrayOutputStream流=新ByteArrayOutputStream();    bitmap.com preSS(比较pressFormat.JPEG,70,流);    返回stream.toByteArray();}私人无效dispatchMediaIntent(INT行动code){    开关(动作code){    案例ACTION_TAKE_PHOTO:        意图takePictureIntent =新意图(MediaStore.ACTION_IM​​AGE_CAPTURE);        文件F = NULL;        尝试{            F = setUpPhotoFile(ACTION_TAKE_PHOTO);            mCurrentMediaPath = f.getAbsolutePath();            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(F));        }赶上(IOException异常五){            e.printStackTrace();            F = NULL;            mCurrentMediaPath = NULL;        }        startActivityForResult(takePictureIntent,动作code);        打破;    案例ACTION_TAKE_VIDEO:        意图takeVideoIntent =新意图(MediaStore.ACTION_VIDEO_CAPTURE);        startActivityForResult(takeVideoIntent,动作code);        打破;    默认:        打破;    }} 

我应该

在哪里执行插入?

  //保存到数据库        BitmapFactory.Options bmOptions =新BitmapFactory.Options();        bmOptions.inJustDe codeBounds = TRUE;        BitmapFactory.de codeFILE(mCurrentMediaPath,bmOptions);        位图位图= BitmapFactory.de codeFILE(mCurrentMediaPath,bmOptions);        插入(getBytesFromBitmap(位图)); 

解决方案 Aras入门教程0 Aras 2023 安装

创建图像的位图,则

  BMP位图= BitmapFactory.de codeStream(新的FileInputStream(F),NULL,NULL);ByteArrayOutputStream流=新ByteArrayOutputStream();bmp.com preSS(Bitmap.Com pressFormat.JPEG,100,流);字节[]的字节数组= stream.toByteArray();dba.open();dba.insertPhoto(字节阵列); 

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

在数据库类如创建表:

 私有静态最后弦乐CREATETABLE_PHOTO =CREATE TABLE eqpphoto(EImage BLOB+);;公共静态最后弦乐TABLE_PHOTO =eqpphoto;众长insertPhoto(字节[] EImage){    尝试{        的System.out.println(函数调用:);        ContentValues​​值=新ContentValues​​();        values​​.put(EI​​MAGE,EImage);        返回db.insert(TABLE_PHOTO,空,价值);    }赶上(例外五){        e.printStackTrace();        返回0;    }} 

I'm trying to save a photo as a blob in the SQLite (not just reference it). mCurrentMediaPath is the current path where the photo will be stored. Now, I need to save it to the database after the picture is taken and save button pressed (I guess after the intent).

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

Where should I implement the insertion?

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

解决方案

Create bitmap of your image then

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

where dba is object of database class.

create table in database class like:

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