2016-04-17 4 views
0

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.

+0

Können Sie Ihren aktuellen Code posten? – Giorgi

+0

@Giorgi Ich habe meine Aktivität und Ansicht hinzugefügt. Vielen Dank – user3665099

Antwort

1

Sie können Ihre Vorschau (in diesem Fall CameraBridgeViewBase) transparent machen, indem Sie den Alpha-Wert der Ansicht festlegen, wobei 0 vollständig unsichtbar ist.

mOpenCvCameraView.setAlpha(0);

Dies sollte Ihre Vorschau "verschwinden" machen.