美文网首页
在 Android 中,拿到 Mat 对象的数据后,如果要将其保

在 Android 中,拿到 Mat 对象的数据后,如果要将其保

作者: 懵懵懂懂_YOYO | 来源:发表于2023-12-21 10:20 被阅读0次

在 Android 中,拿到 Mat 对象的数据后,如果要将其保存到本地存储,你需要先将 Mat 转换为一个可以被 Android 识别并保存为文件的格式,例如 Bitmap。然后你可以使用 Bitmap.compress() 方法将图像保存为 JPEG 或 PNG 格式的文件。

下面是如何将 Mat 对象转换为 Bitmap 并存储到设备本地存储的示例代码:

import org.opencv.android.Utils;
import android.graphics.Bitmap;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

// 假定你已经有了最清晰的 Mat 对象:bestMat
Mat bestMat = ...; // 最清晰的图片对应的 Mat 对象

// 首先将 Mat 转换为 Android 的 Bitmap
Bitmap bmp = null;
try {
    bmp = Bitmap.createBitmap(bestMat.cols(), bestMat.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(bestMat, bmp);
} catch (CvException e) {
    Log.d("Exception", e.getMessage());
}

// 接下来保存 Bitmap 到文件
OutputStream os = null;
String fileName = "clearImage_" + System.currentTimeMillis() + ".png"; // 文件名可以根据需要更改
File file = new File(Environment.getExternalStorageDirectory(), fileName); // 确保已经获取了存储权限

try {
    os = new FileOutputStream(file);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, os); // 100 是压缩率,表示不压缩;PNG是无损格式
    Log.i("ExternalStorage", "Written to " + file.getPath());
} catch (IOException e) {
    Log.e("ExternalStorage", "File not written: " + e.toString());
} finally {
    try {
        if (os != null) {
            os.flush();
            os.close();
        }
    } catch (IOException e) {
        Log.e("ExternalStorage", "Error closing file: " + e.toString());
    }
}

请注意以下几点:
1.权限 - 在 Android 上写入外部存储需要用户授权,确保你的应用已经请求并获得了必要的权限。在AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

如果你的目标 API 等级是 23 或以上(Android 6.0),你还需要在运行时请求权限。

2.存储位置 - 上面的代码将文件保存在外部存储根目录下。你可能需要根据实际情况选择适当的存储位置,例如公共图片目录或者应用私有目录。

3.唯一文件名 - 使用当前时间戳生成唯一的文件名,这避免了重复覆盖同一个文件。

4.内存管理 - 操作完成后释放所有占用的资源,包括 Bitmap 和 Mat 对象。

5.自Android 10起,默认情况下,应用不能直接写入外部存储根目录,你需要使用应用专属目录或者使用 MediaStore API 来保存文件。上面的代码可能需要根据你的Android版本进行相应的调整。

相关文章

网友评论

      本文标题:在 Android 中,拿到 Mat 对象的数据后,如果要将其保

      本文链接:https://www.haomeiwen.com/subject/xngxndtx.html