【问题标题】:Compress Size of Image taken by Custom Camera压缩自定义相机拍摄的图像大小
【发布时间】:2013-12-09 09:05:27
【问题描述】:

如何压缩自定义相机

拍摄的图片大小

获取 3264 x 2448 像素 图像分辨率

必需 1024 x 768 像素 图像分辨率

我希望每当用户使用自定义相机拍照时,它应该是要求的尺寸(1024 x 768 像素)

注意:默认情况下,在 Emulator 上我得到(640 X 480 像素),而在设备上(3264 x 2448像素)

CameraActivity:-

 private Camera mCamera;

    private PreviewSurface mCameraPreview;

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_camera);

                 mCamera = getCameraInstance();

                    mCameraPreview = new PreviewSurface(this, mCamera);
                    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
                    preview.addView(mCameraPreview);

                    Button captureButton = (Button) findViewById(R.id.btnCapture);
                    Log.d(CameraLauncherActivity.LOG_TAG, "captureButton :: " + captureButton);
                    captureButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            mCamera.takePicture(null, null, mPicture);
                            Log.d(CameraLauncherActivity.LOG_TAG, "mCamera.takePicture :: " + mCamera);                                         
                        }
                    });

    private Camera getCameraInstance() {

            Camera camera = null;
            Log.d(CameraLauncherActivity.LOG_TAG, "getCameraInstance()Camera:: " + camera);
            try {
                camera = Camera.open(0);
                Log.d(CameraLauncherActivity.LOG_TAG, "getCameraInstance()open:: " + camera);
            } catch (Exception e) {
                // cannot get camera or does not exist
            }
            return camera;
        }
    }

PreviewSurface.java:-

public PreviewSurface(Context context, Camera camera) {
            super(context);
            this.mCamera = camera;

            this.mSurfaceHolder = this.getHolder();
            this.mSurfaceHolder.addCallback(this);
            this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            this.mSurfaceHolder.setFixedSize(100, 100);
        }

        @Override
        public void surfaceCreated(SurfaceHolder surfaceHolder) {
            try {
                mCamera.setPreviewDisplay(surfaceHolder);
                mCamera.startPreview();
            } catch (IOException e) {
                // left blank for now
            }
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
            mCamera.stopPreview();
            mCamera.release();
        }

        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int format,
                int width, int height) {

                // start preview with new settings
                try {
                mCamera.setDisplayOrientation(90);
                mCamera.setPreviewDisplay(surfaceHolder);
                mCamera.startPreview();
                } catch (Exception e) {
                // intentionally left blank for a test
            }
        }

【问题讨论】:

    标签: android bitmap camera compression resolution


    【解决方案1】:

    并非所有相机都支持所有预览尺寸。您需要将相机的预览尺寸设置为最接近您的目标分辨率。

    使用mCamera.getParameters().getSupportedPreviewSizes(); 获取支持的屏幕尺寸并使用:

    Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
    

    设置预览大小。如果您需要精确的尺寸,您可以压缩结果图像。

    更新:

    私有相机 getCameraInstance() {

        Camera camera = null;
        Log.d(CameraLauncherActivity.LOG_TAG, "getCameraInstance()Camera:: " + camera);
        try {
            camera = Camera.open(0);
            Log.d(CameraLauncherActivity.LOG_TAG, "getCameraInstance()open:: " + camera);
        } catch (Exception e) {
            // cannot get camera or does not exist
        }
        if(camera!=null){
         //get supported sizes:
         List<Size> localSizes = camera.getParameters().getSupportedPreviewSizes();
         //loop through localSizes to get closest size
         Camera.Parameters parameters = camera.getParameters();
         parameters.setPreviewSize(/*closest you could find*/);
         camera.setParameters(parameters);
        }
        return camera;
    }
    

    }

    【讨论】:

    • 我相信你是对的,我需要在我的代码中使用它,见上面我发布了我的 PreviewSurface.java 代码
    • 在您的 getCameraInstance() 方法中返回 Camera 对象之前
    • 现在太慢了...,太大了:parameters.setPreviewSize(1024, 768);获得新的图像尺寸 - 4608 x 2592
    • 你的相机支持1024x768吗?尝试调试并查看 localSizes 中的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多