保存在Android上转换为mat的位图

时间:2015-11-12 17:45:28

标签: java android opencv bitmap

我用openCV测试内存ram的消耗。 我想用方法view.getDrawingCache()将生成的位图转换为mat并使用OpenCV imWrite方法保存它。使用此结果是空文件。

childView.buildDrawingCache();
mat=new Mat(childView.getMeasuredHeight(),width, CvType.CV_8U);  
Utils.bitmapToMat(Bitmap.createBitmap(childView.getDrawingCache()),mat);
MatOfInt matInt=new MatOfInt();
matInt.fromArray(Imgcodecs.CV_IMWRITE_PNG_COMPRESSION, 0);
Imgcodecs.imwrite(cacheFile.getPath() + "/" + name + ".png", image, matInt);

另一方面,如果我将位图保存在系统内存中并使用imRead()方法对其进行充电,并使用imWrite()保存它,如果这样可以正确生成文件。

Bitmap bmp=Bitmap.createBitmap(childView.getDrawingCache());
cacheFile.createNewFile();
FileOutputStream fos = new FileOutputStream(cacheFile);
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();

MatOfInt matInt=new MatOfInt();
matInt.fromArray(Imgcodecs.CV_IMWRITE_PNG_COMPRESSION, 0);
Mat mat=Imgcodecs.imread(mapCacheViews.get(getFinalTweetAdapter().getItem(i).id))
Imgcodecs.imwrite(cacheFile.getPath() + "/" + name + ".png", mat, matInt);

如果生成的位图在两种情况下都退出相同,那么第一个不是什么,第二个是完美保存的?最好的问候

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

Mat tmp = new Mat (avatar.getWidth(), avatar.getHeight(), CvType.CV_8UC1);
Utils.bitmapToMat(avatar, tmp);
Imgproc.cvtColor(tmp, tmp, CvType.CV_8UC1);
Imgcodecs.imwrite(cacheFile.getAbsolutePath(),tmp);

添加此行Imgproc.cvtColor(tmp,tmp,CvType.CV_8UC1);工作正常