2016-04-17 72 views
0

opencvでアンドロイドのカメラプレビューを非表示にしようとしています。私はxamarin C#でアンドロイド(Javaバインディングライブラリ)のopencv3.1.0を使用しています。私はここですべての質問を見上げるが、私はこれをしない。私の見解では、自分のActivity onCreateメソッドでorg.opencv.android.JavaCameraViewを持っています.GOBまたはInvisibleに可視性を変更すると、CameraBridgeViewBaseで取得します。OnCameraFrameメソッドは起動しません。 OnCameraFrameメソッドでnullを返すと、プレビューは表示されませんが、ビュー(textview、button)の他のコンポーネントも表示されません。私はカメラのプレビューを隠す必要がありますが、まだopencv4androidでプレビューコールバックを受け取ります。 My活動でOpencv 3.1.0 Androidカメラのプレビューを非表示にする

私の見解では

<?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> 

[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; 
     } 
    } 
} 

どうもありがとうございました。

+0

あなたの現在のコードを投稿できますか? – Giorgi

+0

@Giorgi私は自分のアクティビティとビューを追加しました。ありがとう – user3665099

答えて

1

プレビュー(この場合はCameraBridgeViewBase)を透明にするには、ビューのアルファ値を0に設定します。0は完全に表示されません。

mOpenCvCameraView.setAlpha(0);

これはあなたのプレビューが "消える" にする必要があります。

関連する問題