2012-10-07 4 views
0

나는 사용자 정의 카메라 뷰를 구현하는 어려움에 직면하고있다.사용자 정의 카메라보기

내가 달성하고자하는 작업은 - 카메라 미리보기에서 나는 (previewcallback 기능에서) 미리보기 그림을 얻었다. 확대/축소하고 카메라보기에서 확대 된 이미지 버전을 그려야합니다. previewcallback 함수에서

는 I 바이트 어레이 등의 화상의 화소 값을 얻었다. 그러나 canvas.drawImage에서는 int 배열을 사용할 수 있습니다. 누구든지 픽셀 데이터가 previewcallback 함수 내에서 바이트 배열로 구성되는 방법을 제안 할 수 있습니까?

은 내가 서피스 뷰 SurfaceView를 잠글 시도했지만 도움이되지 않았다. 그 표면에 아무것도 그릴 수 없도록 null을 반환합니다.

제안 사항? 덕분에 . 미리보기 콜백에서 픽셀 데이터가 구성되어

답변

1

앞서 말했듯이 NV21은 기본값이며 항상 제공되어야합니다. 즉, 다른 기기와 호환되도록하려면 NV21에 의존 할 수 있습니다. 표면보기 잠그기 - 미리보기에 사용하는 표면보기는 카메라 응용 (이미 프로세스 자체에서 실행되며 자체 프로세스에서 실행 됨)로 이미 잠겨 있으므로 사용자가 사용할 수있는 범위를 벗어납니다. 사용하기를 원하면 미리보기를 중지해야합니다. 그래서 카메라 응용 프로그램이이 표면을 해제합니다. (잘하면)

나쁜 소식은 프레임 레이아웃 (이것은 표면보기의 한계이므로 겹칠 수 없음)이있는 첫 번째 표면 위에 다른 표면보기를 배치 할 수 없다는 것입니다. 뉴스 당신이 그것을 oevr 이미지 뷰를 배치하고 (runOnuiThread()를 통해)이 비트 맵을 그릴

당신은 어떻게 우리의 javaOCR project

에서이 작업을 수행하는 예를 찾을 수 할 수 있다는 것입니다

(안드로이드 데모를 참조하십시오. 현재로서는 git repo를 사용하십시오.)

+0

내 추측은 너와 비슷했다. 그 표면은 네이티브 카메라 프로세스에 의해 이미 잠겨 있습니다. 그래서 두 번째 방법을 사용하려고 시도했지만 실패했습니다 (SurfaceView를 통한 SurfaceView). 제대로 작동하지 않았기 때문입니다. 귀하의 제안에 따라 ImageView를 사용하여 유사한 효과를 복제 할 수 있다고 생각합니다. 그 정보를 가져 주셔서 감사합니다, 나는 그걸로 노력할 것입니다. – fadedreamz

2

방법은 미리보기 형식으로 설정에 따라 달라집니다. 기본적으로 Android 기기에서 가장 호환되는 옵션 인 NV21입니다. 예를 들어,이 형식에 대한 자세한 내용은 here을 참조하십시오.

그러나 대략, 이미지 데이터가 된 YCbCr 형식으로되어 - 캔버스 원하는 것이 아니라 일반적인 RGB 컬러 인코딩. 만약 업 샘플링 (식은 Wikipedia에서 찾을 수있다) RGB 값으로

  • 을 된 YCbCr 바이트 값을 변환

    1. 해야 인증 기관 및 CR (색상) 전체 해상도로 채널; Y (휘도) 채널의 너비와 높이의 1/2로 축소되었습니다. 가장 간단한 옵션은 가장 가까운 이웃 업 샘플링을 사용하는 것입니다 - 4 개의 다른 Y 값에 대해 동일한 Cb 및 Cr 값을 사용하십시오. 따라서 Cb 및 Cr 채널의 픽셀 (0,0)을 Y 채널의 픽셀 (0,0), (1,0), (0,1) 및 (1,1)과 쌍으로 연결하면 전체 해상도 이미지입니다.
  • +0

    감사합니다. 먼저 YCbCr to RGB 변환 공식을 사용해 보겠습니다. – fadedreamz

    관련 문제