안녕하세요! 반도의 흔한 고2 학생입니다!!!!
OpenCV로 안드로이드 앱을 만들고 있는데요.....
제가 원하는것은 isFaceVisible == false가 되면
Camera에서부터 얻은 Mat를 1x1 크기로 줄이고
그 1x1 크기의 mat을 담은 1x1 크기의 카메라뷰가 출력되게끔 하려고 합니다...
그런데 위의 로그를 보니 Mat의 크기와, bitmap의 크기가 다르기 때문에 assertion failed 에러가 발생하는 것 같습니다...
그런데 제가 쓰는 NativeCameraView에서 비트맵의 크기를 조절하려면 어떻게 해야 하는지 잘 모르겠습니다 ㅠㅠㅠㅠ
어떻게 해야 할까요???? ㅠㅠㅠㅠ
답변해 주시면 정말정말정말정말 감사드리겠습니다!! 싸랑합니다 ㅠㅠㅠ
아래에는 관련 액션들만 모았습니다...
private LayoutInflater li;
private RelativeLayout mPopupView;
//항상 보이게할 뷰(nativecam_view.xml의 레이아웃)
private CameraBridgeViewBase mOpenCvCameraView;
//mPopupView 안의 카메라뷰 (NativeCameraView1)
private WindowManager.LayoutParams mParams; //뷰의 위치 및 크기
private WindowManager mWindowManager;
.........................
// BaseLoaderCallback 에서...
mOpenCvCameraView.setCameraIndex(1);
mOpenCvCameraView.setMaxFrameSize(768,512);// TODO : 최대 크기 지정 (1280,720)6fps (768,512)12fps
mOpenCvCameraView.enableFpsMeter();
mOpenCvCameraView.enableView();//뷰 활성화
.........................
// onCameraFrame 에서...
mRgba = inputFrame.rgba();
if(!isFaceVisible){
Imgproc.resize(mRgba, mRgba, new Size(1,1));//리턴값을 투명하게 하는 대신 1,1사이즈로 해서 안보이게함
}
.........................
@Override
public void onCreate() {
super.onCreate();
Log.i("TAG", "Face Service Started");
li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
mParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT |// TODO : 크기 줄이기
WindowManager.LayoutParams.TYPE_PHONE | //항상 최상위. 터치 이벤트 안받기 가능.
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | //포커스를 가지지 않음
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | //타임아웃으로 잠금 안됨
PixelFormat.TRANSLUCENT);
//이거 없애도 투명하게 되는거 처리안됨. 뷰는 정상적으로 뜨는거 같음
mParams.gravity = Gravity.LEFT | Gravity.TOP; //좌표계가 좌상점을 중심으로..
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mPopupView = (RelativeLayout) li.inflate(R.layout.nativecam_view, null);
mOpenCvCameraView = (NativeCameraView) mPopupView.findViewById(R.id.NativeCameraView1);
mOpenCvCameraView.setCameraIndex(1);
mOpenCvCameraView.setCvCameraViewListener(this);
mWindowManager.addView(mPopupView, mParams); //SYSTEM_ALERT_WINDOW permission 필요
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
global = (GlobalSettings) getApplicationContext();//super.onCreate()뒤에 넣자
}