마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

카메라로 받은 화면 밝기효과를 실시간으로 변경하고 적용하려면

0 추천

안드로이드 카메라로 잡힌 화면을 실시간으로 변경하고자 합니다. 화면에 영상 출력까지는 여러 문서와 예제를 참고해서 했으나 그이상 진전이 없습니다. 일주일을 훌쩍 넘어서 이러고 있네요. 어떤 소스나 문서를 보면서 맴돌고 있습니다. 카메라예제 기본에서 답보 상태입니다. 

 

surfaceChanged()가 아닐까 생각했으나 화면 크기나 레이아웃 상태 변경에 따라서 호출되는 것으로 보이나 효과 적용에는 사용하지 않는 메소드라 보ㅇ이고~..

 

onPreviewFrame(byte[] arg0, Camera arg1), onDrawFrame(GL10 unused)를 사용해서 실시간으로 찍히고 있는 화면을 재 갱신해주어야 할가요? 화면 위에 단순히 사각형, 점선, 도형을 그리는 것을 말하는 것이 아닙니다.

setExposureCompensation();를 사용하면 화면 밝기가 바뀌나 카메라 열기 전에 한번 사용하고 다시 조정하려면 카메라 자원을 해제하고 다시 열어야합니다. 잘못 이해하고있는지? setWhiteBalance()도 같은 작동이라 봅니다. 그래서 이 두개는 실시간 적용에는 사용할 수 없어 보이고.....설명부탁드립니다.

 

???? ????랜즈로 들어오는 화면에 효과(밝기 조정, 블러, 샤픈, 반전...)를 주어서 바로 그 화면에 뿌려주고 갱신하려고 합니다. 어떻게 해야할까요?????  ????

 

https://github.com/google/grafika 를 보면 openGL를 사용합니다. 화면에 효과를 주고 그 결과화면을 같은 뷰 (아마도 SurfaceView)에 리얼타임으로 적용해서 보여주려면 오픈지엘과 텍스쳐texture을 써야할까요?????

 

Camera가 퇴화되어 API21이상에 맞춰 Camera2로 업데이트도 생각해야하는데 몇 날을 보내고 있습니다.

 

 

타드이별펍 (440 포인트) 님이 2015년 11월 17일 질문
쎄라비님의 답변을 듣고 원하는 코드를 만들었습니다.

SurfaceView를 상속받은 클레스 MyPreview를 만들고 내부에서
mParameters.setExposureCompensation(param);를 하고
mCamera.setParameters(mParameters);를 하니 실시간으로
밝기가 변경되네요.

무엇때문인지는 몰라도 onPreviewFrame(), surfaceChanged()와 같은 메소드 내부에서 사용해야 할 것 정상 작동하리라는 생각을 했었습니다. 뭣 때문에 빙빙 돌아갔는지. 등잔 밑이 ~란 속담이 생각납니다.

쎄라비님 고맙네요. ^^
안녕하세요. 밝기 변경으로 저도 지금 계속 해메고 있는데요...
OnCameraFrame에서 실시간 영상을 받아오면서
Seekbar의 int값으로 밝기 조절을 하고 싶은데요...
무슨 문제인지 밝기 변경이 안되고 있어요..
구현하신 부분 조금이라도 도움 받을 수 있을까요?? 부탁드립니다~~
--------------------------------------------------------------------------------
public void myPriview(){
        mMainActivity.exposureValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress = seekBar.getProgress();
                if (mCamera != null) {
                    Camera.Parameters params;
                    params = mCamera.getParameters();
                    params.setExposureCompensation(progress);
                    mCamera.setParameters(params);
                    params.setExposureCompensation(progress);

                }
            }
        });

-------------------------------------------------------------------------------------

1개의 답변

0 추천
 
채택된 답변
setWhiteBalance 의 경우 조정할때마다 카메라를 새로 Preview 하진 않는걸로 기억합니다.
라쎄린드 (25,460 포인트) 님이 2015년 11월 17일 답변
타드이별펍님이 2015년 11월 19일 채택됨
setWhiteBalance()에 인수를 변경하면 그때그때 화면에 자동 적용될까요?
...