Android:如何将字节数组传递给blob(将相机图像存储到sqlite中)

时间:2018-04-14 23:12:48

标签: android android-sqlite

如何正确更改此byte[] photo = getBytes(imageBitmap);以存储在数据库Blob中?

if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            //ImageView imageview = findViewById(R.id.imageView);
            //imageview.setImageBitmap(imageBitmap);

            //Bitmap to bytes for database
            byte[] photo = getBytes(imageBitmap);

            Bitmap bmp = BitmapFactory.decodeByteArray(photo, 0, photo.length);
            ImageView image = (ImageView) findViewById(R.id.imageView);

            image.setImageBitmap(Bitmap.createScaledBitmap(bmp, image.getWidth(), image.getHeight(), false));


           // DatabaseHandler mydb = new DatabaseHandler(getApplicationContext());
           // Walk walk = new Walk(photo);
          //  mydb.addWalk(walk);
}

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用ByteArrayOutputStream? 您可以查看文档https://developer.android.com/reference/java/io/ByteArrayOutputStream.html

或者为了让你轻松,你可以像这样的人那样做 converting Java bitmap to byte array

`

Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();

`

答案 1 :(得分:0)

首先,究竟是什么问题?保存图像或将其存储到db?

CREATE TABLE t1(id INTEGER PRIMARY KEY,data BLOB);

归结为:

InputStream is = context.getResources().open(R.drawable.MyImageFile);
try {
    byte[] buffer = new byte[CHUNK_SIZE];
    int size = CHUNK_SIZE;
    while(size == CHUNK_SIZE) {
        size = is.read(buffer);  //read chunks from file
        if (size == -1) break;

        ContentValues cv = new ContentValues();
        cv.put(CHUNK, buffer);       //CHUNK blob type field of your table

        long rawId = database.insert(TABLE, null, cv); //TABLE table name
    }
} catch (Exception e) {
    Log.e(TAG, "Error saving raw image to: "+rawId, e);
}