0

我的 Android 应用程序从 sd 卡读取图像文件并将图像存储在 sqlite 数据库中的 blob 中。

目前我正在将 FileInputStream 转换为字节数组并将其存储在 blob 中。一个 blob 不能超过 1MB 的大小,所以在这种情况下,我会发布一条错误消息并取消操作。

        FileInputStream fis = null;
    try {
        fis = new FileInputStream(FilePath);    // FilePath contains a valid path
    } catch (FileNotFoundException e) {
        Toast.makeText(MyActivity.this, "File not found: " + FilePath, Toast.LENGTH_LONG).show();
        return;
    }

    BufferedInputStream bis = new BufferedInputStream(fis, 1070);
    ByteArrayBuffer bab = new ByteArrayBuffer(128);

    int current = 0;
    try {
        while ((current = bis.read()) != -1) bab.append((byte) current);
    } catch (IOException e) {
        Toast.makeText(MyActivity.this, "Error reading Picture: " + FilePath, Toast.LENGTH_LONG).show();
        return;
    }

    byte[] imageBa = bab.toByteArray();

    if (imageBa.length > 1024*1024) 
        showErrorDialog();
    else { 
        saveImageInDatabase(imageBa); // sage image byte[] in BLOB-column so sq-lite database

        // show image in imageView
        imageStream = new ByteArrayInputStream(imageBa);
        Bitmap imageBitmap = BitmapFactory.decodeStream(imageStream);   // uncompressed imageBitmap has a much bigger size than the image-byte[]
        imageView.setImageBitmap(imageBitmap);
    }

我想通过降低分辨率(而不是大小)来摆脱 1MB 的限制并存储更大的图像。

我可以使用 BitmapFactory 选项 inSampleSize 来压缩图像和/或将位图转换回字节 [],例如使用 bitmap.compress 来寻求解决方案。然而,即使是使用 BitmapFactory 创建的未压缩位图的大小也比原始字节 [] 大得多,所以我担心我会失去质量。

任何想法如何解决我的问题?非常感谢,格哈德。

4

0 回答 0