2012-12-11 402 views
4

我试图将一个bmp文件转换为一个垫,然后将其转换为灰度。但是我无法正常工作。下面是我得到了什么:Utils.bitmapToMat崩溃应用程序

String filename = "/mnt/sdcard/DCIM/01.bmp";  
Bitmap bmp = BitmapFactory.decodeFile(filename); 
Mat imgToProcess = null; 

Utils.bitmapToMat(bmp, imgToProcess); 

但只要使用的是最后一行,应用程序崩溃刚(中继续就好了休息的时间)。

的代码的其余部分将是:

Imgproc.cvtColor(imgToProcess, imgToProcess, Imgproc.COLOR_BGR2GRAY); 
Imgproc.cvtColor(imgToProcess, imgToProcess, Imgproc.COLOR_GRAY2RGBA, 4); 
Utils.matToBitmap(imgToProcess, bmp); 

我不知道这是否工作虽然,因为我不能得到的文件转换成垫还从早先的部分的代码。查看Utils文档(找到here)我正确使用它,但它仍然无法正常工作。

任何人都可以帮助我吗?

+2

什么是logcat输出? – ArtemStorozhuk

+0

该文件在我的手机上... logcat基本上说: 12-11 16:38:04.834:E/AndroidRuntime(540):java.lang.IllegalArgumentException:bmp == null – user1804434

+0

只是编辑你的问题,看看在我的答案。 – ArtemStorozhuk

回答

3

更改行:

Mat imgToProcess = null; 

这样:

Mat imgToProcess = new Mat(); 

或本:

Mat imgToProcess = new Mat(bmp.getHeight(), bmp.getHeight(), CvType.CV_8UC4); 

为什么不干脆用Highgui.imread呢?

Mat imgToProcess = Highgui.imread(filename); 
+0

我只是试着这两行:String filename =“/mnt/sdcard/DCIM/01.bmp”; Mat imgToProcess = Highgui.imread(filename);仍然崩溃。 :/ – user1804434

+1

这意味着这个文件不在那里。使用'getexternalstoragedirectory'而不是'/ mnt/sdcard /'并再次检查路径。 – ArtemStorozhuk

+0

您的多次尝试的错误代码示例及其错误(编辑您的问题)。你可能会误解和做错事。 –