【发布时间】:2015-01-10 13:46:04
【问题描述】:
我正在使用 OpenCV android 库编写应用程序。我创建了一个我想调用的 CameraActivity,并返回一个图像。
public class CameraActivity extends Activity implements CvCameraViewListener2 {
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
...
Button snap = (Button) findViewById(R.id.snap);
snap.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
processVideo();
}
});
snap.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
processPicture();
return true;
}
});
}
@Override
public void onPause() {
...
}
@Override
public void onResume() {
...
}
public void onDestroy() {
...
}
public void onCameraViewStarted(int width, int height) {
...
}
@Override
public void onCameraViewStopped() {
...
}
public Mat onCameraFrame(CvCameraViewFrame cvf) {
// Grab frame
cvf.rgba().copyTo(frame);
// Filter frame
filterLaser();
// Retrieve contour center point
contourLaser();
// Draw
draw();
// Display the result.
return cvf.rgba();
}
private void draw(){
...
}
private void filterLaser(){
...
}
void processVideo(){
...
}
void processPicture(){
Intent result = new Intent();
if(frame != null)
{
// Convert the processed Mat to Bitmap
Bitmap resultBitmap = Bitmap.createBitmap(frame.cols(), frame.rows(),Bitmap.Config.ARGB_8888);;
Utils.matToBitmap(frame, resultBitmap);
setResult(Activity.RESULT_OK, result);
result.putExtra("BITMAP", resultBitmap);
} else {
setResult(Activity.RESULT_CANCELED); // No frame found
}
Log.d("LastPoint", "FINISHED");
finish();
}
};
使用 MainActivity 中的以下代码调用此 Activity。
Button reply = (Button) findViewById(R.id.buttonReply); reply.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(getApplicationContext(), CameraActivity.class); startActivityForResult(i, CAMERAREQUEST); } });
并将结果提取到 MainActivity 中。
@覆盖 public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d("LastPoint", "WRITING");
switch(requestCode) {
case (CAMERAREQUEST) :
if (resultCode == Activity.RESULT_OK) {
Bitmap bmp = (Bitmap) data.getParcelableExtra("Bitmap");
writeBitmap(bmp);
}
break;
}
}
“FINISHED”被打印到 logcat。 “写作”不是。 为什么我无法退出 CameraActivity?视图本身也没有关闭。
【问题讨论】:
-
你应该在
setResult(Activity.RESULT_OK, result);之前使用result.putExtra("BITMAP", resultBitmap);,而不是之后。 -
谢谢!但这并不能解决我的问题。
-
您是否尝试将 Log 放入 if(frame != null) {} 块中,以确保它通过那里?
-
我做了,并再次验证。它正在过去。