Ich versuche, Android Kamera Vorschau in opencv zu verstecken. Ich benutze opencv3.1.0 für Android (Java Binding Library) mit Xamarin C#. Ich schaue hier alle Fragen auf, aber ich konnte das nicht tun. Aus meiner Sicht habe ich org.opencv.android.JavaCameraView in meiner Aktivität onCreate-Methode Ich bekomme es mit CameraBridgeViewBase, wenn ich die Sichtbarkeit von es auf GONE oder Invisible ändern, OnCameraFrame-Methode wird nicht ausgelöst. Und wenn ich in der OnCameraFrame-Methode null zurückgebe, funktioniert die Vorschau nicht, aber andere Komponenten in der Ansicht (Textansicht, Schaltfläche) werden nicht angezeigt. Ich muss die Kameravorschau ausblenden, bekomme aber trotzdem einen Vorschau-Callback mit opencv4android.Opencv 3.1.0 Android verstecken Kamera Vorschau
In My View
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.opencv.android.JavaCameraView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/game_screen_surface_view" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/game_screen_text_view" />
</LinearLayout>
In My Activity
[Activity(Label = "GameActivity")]
public class GameActivity : Activity, CameraBridgeViewBase.ICvCameraViewListener2
{
private CameraBridgeViewBase mOpenCvCameraView;
private Mat mIntermediateMat;
private TextView _wordText;
private Callback mLoaderCallback;
private int tryCount = 15;
private int currentTry = 0;
private int circleCount = 0;
Dictionary<int, char> letters = new Dictionary<int, char>();
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Window.AddFlags(WindowManagerFlags.KeepScreenOn);
SetContentView(Resource.Layout.game_screen);
mOpenCvCameraView = FindViewById<CameraBridgeViewBase>(Resource.Id.game_screen_surface_view);
_wordText = FindViewById<TextView>(Resource.Id.game_screen_text_view);
mOpenCvCameraView.Visibility = ViewStates.Visible;//If set GONE or Invisible OnCameraFrame Method not firing
mOpenCvCameraView.SetCvCameraViewListener2(this);
mLoaderCallback = new Callback(this, mOpenCvCameraView);
}
protected override void OnPause()
{
base.OnPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.DisableView();
}
protected override void OnResume()
{
base.OnResume();
if (!OpenCVLoader.InitDebug())
{
OpenCVLoader.InitAsync(OpenCVLoader.OpencvVersıon300, this, mLoaderCallback);
}
else
{
mLoaderCallback.OnManagerConnected(LoaderCallbackInterface.Success);
}
}
protected override void OnDestroy()
{
base.OnDestroy();
if (mOpenCvCameraView != null)
mOpenCvCameraView.DisableView();
}
public Mat OnCameraFrame(CameraBridgeViewBase.ICvCameraViewFrame inputFrame)
{
Mat rgba = inputFrame.Rgba();
Mat mat = rgba;
//some opengl code.
return mat; //If I return null preview is not showing but If ay add button to view it is not showing too
}
public void OnCameraViewStarted(int width, int height)
{
mIntermediateMat = new Mat();
}
public void OnCameraViewStopped()
{
// Explicitly deallocate Mats
if (mIntermediateMat != null)
mIntermediateMat.Release();
mIntermediateMat = null;
}
private char GetLetter(int r = 0, int g = 0, int b = 0)
{
return letters[getEqualofRGB(0, 0, 2)];
}
}
class Callback : BaseLoaderCallback
{
private readonly CameraBridgeViewBase mOpenCvCameraView;
public Callback(Context context, CameraBridgeViewBase cameraView)
: base(context)
{
mOpenCvCameraView = cameraView;
}
public override void OnManagerConnected(int status)
{
switch (status)
{
case LoaderCallbackInterface.Success:
{
mOpenCvCameraView.EnableView();
}
break;
default:
{
base.OnManagerConnected(status);
}
break;
}
}
}
Vielen Dank.
Können Sie Ihren aktuellen Code posten? – Giorgi
@Giorgi Ich habe meine Aktivität und Ansicht hinzugefügt. Vielen Dank – user3665099