2012-10-29 2 views
3

SurfaceView를 사용하여 표시하는 카메라 앱을 개발 중입니다.Galaxy S3처럼 녹화 도중 카메라 캡쳐 화면을 가져 옵니까?

나는 서피스 뷰 SurfaceView의 화면을 캡처 (및 비트 맵으로 저장)합니다 (서피스 뷰 SurfaceView를 감싸는 레이아웃) canvas.drawBitmap와
도를 getDrawingCache()와
을 할 수있어

(...)

그러나 두 가지 방법 모두에서 비트 맵은 항상 투명/비어 있습니다.

나는 갤럭시 S3를 가지고 있는데, 카메라에이 기능이있는 것을 볼 수 있습니다. 정확히 어떻게 처리합니까?

감사합니다.

답변

2

시간이 지나도 나는 좋은 해결책이 있습니다.
어쩌면 최선의 방법은 아니지만 나에게 충분합니다.

private long start; 
private long end; 
private long period; 

미디어 레코더가 시작 직후 먼저 시작 시간을 얻을 :

private void startRecording() 
{ 
    mMediaRecoder.start(); 
    start = System.currentTimeMillis(); 
} 

을 그리고 u는 스크린 샷을 촬영을 위해 화면/버튼을 누르면 저장, 기간 :

private void captureImage() 
{ 
    end = System.currentTimeMillis(); 
    period = end - start; 
} 

마지막으로 녹음을 중지하면 마침표와 미디어 검색기를 사용하여 비트 맵을 얻습니다.

private void saveVideo() 
{ 
    MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
    //path -> the path to the video 
    retriever.setDataSource(path); 
    Bitmap bitmap = retriever.getFrameAtTime(period * 1000,MediaMetadataRetriever.OPTION_CLOSEST); 
} 

희망은 당신을 돕는다!

0

표면보기에 대해 캐시가 유지되지 않습니다. 그래서 캐시 된 비트 맵을 가져올 수 없습니다. 실제로 어떤 뷰가 렌더링되고 캐시가 켜지면 뷰 비트 맵이 렌더됩니다. 뷰의 렌더링 효율을 향상시키기 위해 그리기를 위해 시스템에서 수학적 계산을 수행하지 않습니다.

+0

나는 SurfaceView를 감싸는 레이아웃을 의미했습니다. 나는 – dor506

+0

SurfaceView 작업을 실제 캐시 이미지가 아닌 오버레이에 편집했습니다. –

관련 문제