Android初始化Mat时抛出width and height must be >0异常求助
解决Bitmap.createBitmap抛出IllegalArgumentException(宽高必须>0)的问题
兄弟,你这崩溃的原因一眼就能看出来——你创建的Mat imgRgba是空的!它的宽和高都是0,调用Bitmap.createBitmap的时候自然就触发参数非法的异常了。
先看你初始化Mat的代码:
Mat imgRgba = new Mat();
这行代码只是创建了一个空的Mat对象,它还没有任何图像数据,所以imgRgba.width()/cols()和imgRgba.height()/rows()返回的都是0,这就导致Bitmap.createBitmap直接报错。
给你两个关键的解决步骤:
1. 先确保Mat对象有实际的图像数据
在调用Bitmap创建方法之前,你得先让imgRgba加载或者接收真实的图像内容,比如:
- 如果是相机帧处理场景:先把相机输入的帧(比如灰度Mat)转换为RGBA格式,填充到
imgRgba里// 假设inputMat是相机回调获取到的原始帧 Mat imgRgba = new Mat(); Imgproc.cvtColor(inputMat, imgRgba, Imgproc.COLOR_GRAY2RGBA); // 此时imgRgba就有了和inputMat一样的宽高 - 如果是手动初始化Mat:直接指定宽高和格式
// 创建一个480x640的RGBA格式Mat Mat imgRgba = new Mat(480, 640, CvType.CV_8UC4);
2. 加个安全判断避免崩溃
就算你确保了Mat会被填充数据,也建议加个判断,防止极端情况下的崩溃:
Mat imgRgba = new Mat(); // 先完成imgRgba的图像数据填充... if (imgRgba.cols() > 0 && imgRgba.rows() > 0) { final Bitmap bitmap = Bitmap.createBitmap(imgRgba.cols(), imgRgba.rows(), Bitmap.Config.RGB_565); Utils.matToBitmap(imgRgba, bitmap); // 这里写你使用bitmap的逻辑 } else { // 处理Mat为空的情况,比如打个日志提示 Log.e("BitmapError", "Mat对象没有有效尺寸,无法创建Bitmap"); }
另外提一句:Mat.width()和Mat.cols()是完全等价的,Mat.height()和Mat.rows()也是一样的,所以你之前两种写法都没问题,核心还是要保证Mat有实际的尺寸。
内容的提问来源于stack exchange,提问作者Pooja Patwa
相关产品推荐
相关产品推荐

