+)기록/과제

정리사항 25 - setPreviewCallback, 비트맵 파일 변환 및 저장

AppJinny 2023. 3. 9. 08:45

*setPreviewCallback

-적용

https://stackoverflow.com/questions/20298699/onpreviewframe-data-image-to-imageview/20888671#20888671

 

OnPreviewFrame data image to imageView

i'm trying to get the byte[] from the preview of the camera, convert it to bitmap and display it on a imageview with imageView.setImageBitmap() i've managed to start the preview and display it on a

stackoverflow.com

 

https://yeolco.tistory.com/44

 

[안드로이드] 실시간 SurfaceView 화면 캡쳐하기

어플리케이션 제작 중에 SurfaceView에 CameraPreview를 이용하여 카메라를 제어하는 프로그래밍 중실시간으로 SurfaceView를 캡쳐해야하는 코드가 필요해 처리하는 과정 등을 정리하여 포스팅합니다.Surf

yeolco.tistory.com

 

-적용 간단한 코드(+사진저장)

https://sangil.tistory.com/23

 

surfaceview 실시간 사진 저장

public void onPreviewFrame(byte[] data, Camera camera){ Log.d("PreviewCallback",data.length +"" ); try { Camera.Parameters parameters = camera.getParameters(); Size size = parameters.getPreviewSize(); YuvImage image = new YuvImage(data, parameters.getPrevi

sangil.tistory.com

 

***사진저장(png) 참고(적용)

https://crazykim2.tistory.com/445

 

[Android Studio] Bitmap을 File로 변환하기

안녕하세요 프로젝트를 하면서 카메라로 찍은 데이터를 Bitmap으로 변환한 후 File로 변경해서 서버로 전송하는 프로젝트를 진행했습니다 약간 어려웠던 부분이 있어서 정리해봤습니다 Bitmap에서

crazykim2.tistory.com

 

*사진저장 참고

https://www.masterqna.com/android/38863/onpreviewframe-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC-%EB%B0%94%EB%A1%9C-%EB%BF%8C%EB%A0%A4%EC%A3%BC%EB%8A%94-%EC%96%B4%ED%94%8C-%EA%B0%9C%EB%B0%9C%EC%A4%91%EC%9D%B8%EB%8D%B0-gc%ED%98%B8%EC%B6%9C%EC%9D%B4-%EB%84%88%EB%AC%B4-%EC%8B%AC%ED%95%A9%EB%8B%88%EB%8B%A4

 

안드로이드 - onPreviewFrame 를 사용하여 이미지를 바로 뿌려주는 어플 개발중인데 GC호출이 너무 심

onPreviewFrame 에 들어오는 모든 프레임이 필요하지않다면 타이머등을 써서 몇개씩 건너뛰도록 해보면 버벅거리는 현상이 없어지더군요.. 또한 기기마다 성능의 차이가 있어서 성능이 떨어지는 기

www.masterqna.com

 

-설명...

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=wjdtjdgus956&logNo=120132685332 

 

PreviewCallBack byte[] -> bitmap 변환

카메라에서 영상을 받아와 화면에 표시하고, 영상에대해 영상처리(마커인식)을 하기 위해 작업하고있습니다...

blog.naver.com

 

threadCamera.setPreviewCallback(new Camera.PreviewCallback() {

    @Override
    public void onPreviewFrame(byte[] bytes, Camera camera) {

        camera.addCallbackBuffer(bytes);

        //jpeg포맷 변경
        int width = parameters.getPreviewSize().width;
        int height = parameters.getPreviewSize().height;

        YuvImage yuvImage = new YuvImage(bytes, parameters.getPreviewFormat(), width, height, null);

        ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
        yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, byteOutputStream);

        Log.i("LOG/D", "getPreviewSize() : " + width + "x" + height );

        byte[] currentBytes = byteOutputStream.toByteArray();
        Bitmap bitmap = BitmapFactory.decodeByteArray(currentBytes, 0, currentBytes.length);

        //비트맵 파일저장(외부저장소)
        String filePath = Environment.getExternalStorageDirectory().getPath() + "/out.png";
        File file = new File(filePath);
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            bitmap = rotateImage(bitmap, 270);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
        } catch (FileNotFoundException e) {

        }
        
        }//onPreviewFrame
                });

                threadCamera.setPreviewDisplay(threadHolder);
                threadCamera.startPreview();

            } catch (IOException e) {

            }