参考项目地址 GitHub - nihui/ncnn-android-yolov5
布局文件main.xml 里面增加一个Button用来保存识别图片之后的结果图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#6B8E23">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/buttonImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选图" />
<Button
android:id="@+id/buttonDetect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="识别-cpu" />
<Button
android:id="@+id/buttonDetectGPU"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="识别-gpu" />
<Button
android:id="@+id/buttonSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存结果" />
</LinearLayout>
<ImageView
android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
AndroidManifest.xml 里面增加权限申请
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" />
MainActivity.java 里面重写public void onCreate(),在Button buttonDetectGPU代码块的后面增加一个Button类型按钮,注册监听器,并调用saveBitmap()方法。
Button buttonSave = (Button) findViewById(R.id.buttonSave);
buttonSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (yourSelectedImage == null)
return;
saveBitmap(bitmap);
}
});
增加saveBitmap()方法,需要传一个Bitmap类型的参数进去。
public void saveBitmap(Bitmap bitmap) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// 保存图片到SD卡上
File file = new File(Environment.getExternalStorageDirectory().getPath() + File.separator + String.valueOf(System.currentTimeMillis()) + "SS.jpg");
FileOutputStream stream = new FileOutputStream(file);
// compress - 压缩的意思
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
//存储完成后需要清除相关的进程
stream.flush();
stream.close();
Toast.makeText(MainActivity.this, "保存图片成功", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "保存图片失败", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}).start();
}
最后,不知道哪里的问题,还是没有实现保存功能。可能是传参数bitmap不对劲。