AndroidStudio会提示问题出在这里Utils.matToBitmap(backProject, bitmap);
其实问题的原因是 mat 和 bitmap 的宽高没有匹配
我原来是这样写的:
@Override
public void onCalcBackProject(final Mat backProject) {
Log.i(TAG, "onCalcBackProject: " + backProject);
ObjectDetectingActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (null == bitmap) {
bitmap = Bitmap.createBitmap(backProject.cols(), backProject.rows(), Bitmap.Config.ARGB_8888);
}
if(backProject!=null) {
Utils.matToBitmap(backProject, bitmap);
bitmap = ObjectDraw.convertGreyImg(bitmap, 240, 320);
image.setImageBitmap(bitmap);
}
}
});
}
问题在:
if (null == bitmap) {
bitmap = Bitmap.createBitmap(backProject.cols(), backProject.rows(), Bitmap.Config.ARGB_8888);
}
因为这里bitmap只创建了一次,没有刷新,而mat却是实时刷新的。
修改后:
@Override
public void onCalcBackProject(final Mat backProject) {
Log.i(TAG, "onCalcBackProject: " + backProject);
ObjectDetectingActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if(backProject!=null) {
bitmap = Bitmap.createBitmap(backProject.cols(), backProject.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(backProject, bitmap);
bitmap = ObjectDraw.convertGreyImg(bitmap, 320, 200);
image.setImageBitmap(bitmap);
}
}
});
}
恢复正常
因为前者的代码 bitmap 只创建了一次,在后来程序的运行中mat则更新了。所以在mat更新的时候bitmap的尺寸信息也更新一下,问题就解决了。