,当发生错误时
发布时间:2025-06-24 19:03:28 作者:北方职教升学中心 阅读量:934
bitmap2.recycle()。
, 。, 。显示错误的信息 } } private Bitmap loadBitmapFromResource(int resourceId) { InputStream inputStream = getResources().openRawResource(resourceId); try { return BitmapFactory.decodeStream(inputStream); } catch (Exception e) { Log.e(TAG, "资源加载失败#34;, e); return null; } finally { try { inputStream.close(); } catch (IOException e) { Log.e(TAG, "关闭失败", e); } } } private Mat convertBitmapToMat(Bitmap bitmap) { Mat mat = new Mat(); Utils.bitmapToMat(bitmap, mat); return mat; } private Bitmap convertMatToBitmap(Mat mat) { Bitmap bitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(mat, bitmap); return bitmap; } private Mat stitchImages(Mat mat1, Mat mat2) { if (mat1.rows() != mat2.rows()) { Log.e(TAG, "图像高度不一致不能拼接"); return null; } List<Mat> mats = new ArrayList<>(); mats.add(mat1); mats.add(mat2); Mat stitchedMat = new Mat(); Core.hconcat(mats, stitchedMat); return stitchedMat; }}。, 。 即使出现错误,它只会打印日志并停止执行,不会导致应用程序崩溃。
- 错误处理:。 和 。 使用 。 在 。 记住,在处理大型图像时,特别要注意内存管理避免内存溢出 (OOM) 错误。 必要条件。
convertMatToBitmap。
R.drawable.image1。,当发生错误时,
函数从资源加载图片,并进行错误处理。mat2.release()。代码说明:。图像高度不一致等。
获取其引用。stitchImages。。
为您提供实际的图像资源 ID。
这个改进后的代码更强大,运行时可以更好地避免崩溃,并提供更清楚的错误信息。
Core.hconcat。import org.opencv.android.Utils;import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;import org.opencv.imgcodecs.Imgcodecs;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;import android.widget.ImageView;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;public class ImageStitchingActivity extends AppCompatActivity { private static final String TAG = "ImageStitchingActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 您的布局文件 ImageView imageView = findViewById(R.id.imageView); // 你的Imageviewe try { Bitmap bitmap1 = loadBitmapFromResource(R.drawable.image1); // 用你的资源ID代替 Bitmap bitmap2 = loadBitmapFromResource(R.drawable.image2); // 用你的资源ID代替 if (bitmap1 == null || bitmap2 == null) { Log.e(TAG, "图像加载失败#34;); return; } Mat mat1 = convertBitmapToMat(bitmap1); Mat mat2 = convertBitmapToMat(bitmap2); if (mat1 == null || mat2 == null) { Log.e(TAG, "Bitmap 转 Mat 失败"); return; } Mat stitchedMat = stitchImages(mat1, mat2); if (stitchedMat == null) { Log.e(TAG, "图像拼接失败#34;); return; } Bitmap stitchedBitmap = convertMatToBitmap(stitchedMat); if (stitchedBitmap == null) { Log.e(TAG, "Mat 转 Bitmap 失败"); return; } imageView.setImageBitmap(stitchedBitmap); // 释放资源 mat1.release(); mat2.release(); stitchedMat.release(); bitmap1.recycle(); bitmap2.recycle(); } catch (Exception e) { Log.e(TAG, "拼接过程中出现错误: " + e.getMessage()); // 处理异常例如,
代码说明:。
convertBitmapToMat。stitchedMat.release()。mat1.release()。
使用前请注意:
- 替换 。,并在代码中使用 。
loadBitmapFromResource。
- 图像加载:。
ImageView。
findViewById。
和 。API说明:
///垂直拼接所有图片的宽度都需要相同的Core.vconcat();///横向拼接所有图片的高度都需要相同的Core.hconcat();
Android OpenCV-CSDN博客集成。bitmap1.recycle()。打印日志信息并返回,避免程序崩溃。
- 在您的布局文件中添加一个 。 。, 。 函数封装了 Bitmap 和 Mat 之间的转换,提高代码的可读性和可维护性。= mat2.rows()) { Log.e(TAG, "图像高度不一致不能拼接"); return null; } List<Mat> mats = new ArrayList<>(); mats.add(mat1); mats.add(mat2); Mat stitchedMat = new Mat(); Core.hconcat(mats, stitchedMat); return stitchedMat; }}。
R.drawable.image2。
在函数中c;添加输入图像高度是否一致的检查,这是 。 这些句子用于释放资源防止内存泄漏。 在代码中添加了大量的错误检查,例如图像加载失败, 。