안드로이드2013. 1. 22. 21:07

글을 올린 블로거를 생각해서 광고 한번만 클릭해주시면 감사하겠습니다

안드로이드에서 surfaceview로 카메라를 띄울때 아래처럼 surfaceview class를 만들어 띄우게 되는데

가장 기본적인 surfaceview로 띄운 카메라 소스이다 아래 소스를 보면 빨간색으로 표시해 놓은 곳이 

카메라의 해상도를 변경하는 부분이다.


class MyCameraSurface extends SurfaceView implements SurfaceHolder.Callback {

SurfaceHolder mHolder;

Camera mCamera;


@SuppressWarnings("deprecation")

public MyCameraSurface(Context context, AttributeSet attrs) {

super(context, attrs);

mHolder = getHolder();

mHolder.addCallback(this);

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}


// 표면 생성시 카메라 오픈하고 미리보기 설정

public void surfaceCreated(SurfaceHolder holder) {

mCamera = Camera.open();

//mCamera = Camera.CameraInfo.CAMERA_FACING_FRONT;

mCamera.setDisplayOrientation(0);

try {

mCamera.setPreviewDisplay(mHolder);

int m_resWidth;

int m_resHeight;

m_resWidth = mCamera.getParameters().getPictureSize().width;

    m_resHeight = mCamera.getParameters().getPictureSize().height;

    Camera.Parameters parameters = mCamera.getParameters();

//아래 숫자를 변경하여 자신이 원하는 해상도로 변경한다

    m_resWidth = 1280; 

    m_resHeight = 720;

    parameters.setPictureSize(m_resWidth, m_resHeight);

    mCamera.setParameters(parameters);

} catch (IOException e) {

mCamera.release();

mCamera = null;

}

}


    // 표면 파괴시 카메라도 파괴한다.

public void surfaceDestroyed(SurfaceHolder holder) {

if (mCamera != null) {

mCamera.stopPreview();

mCamera.release();

mCamera = null;

}

}


// 표면의 크기가 결정될 때 최적의 미리보기 크기를 구해 설정한다.

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

Camera.Parameters params = mCamera.getParameters();

        List<Size> arSize = params.getSupportedPreviewSizes();

        if (arSize == null) {

params.setPreviewSize(width, height);

        } else {

        int diff = 10000;

        Size opti = null;

        for (Size s : arSize) {

        if (Math.abs(s.height - height) < diff) {

        diff = Math.abs(s.height - height);

        opti = s;

       

        }

        }

params.setPreviewSize(opti.width, opti.height);

        }

        

        params.setRotation(0);

        

mCamera.setParameters(params);

mCamera.startPreview();

}

}

Posted by 퍼플카우D