简体   繁体   English

如何压缩图像大小

[英]How Do I compress Size of Image

Here is the code which i am using to capture image, but now my question is How Do I Compress Size of Image taken by my Custom Camera 这是我用来捕获图像的代码,但是现在我的问题是如何压缩自定义相机拍摄的图像大小

CameraSurfaceView.java: CameraSurfaceView.java:

class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback {

    Camera camera;

    CameraSurfaceView(Context context) {
        super(context);

        SurfaceHolder holder = this.getHolder();
        holder.addCallback(this);
    }

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

        camera.setDisplayOrientation(90);
        camera.startPreview();
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            // Open the Camera in preview mode
            this.camera = Camera.open();
            this.camera.setPreviewDisplay(holder);
        } catch (IOException ioe) {
            ioe.printStackTrace(System.out);
        }

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        camera.stopPreview();
        camera.release();
        camera = null;
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        // TODO Auto-generated method stub
    }

    public void takePicture(PictureCallback imageCallback) {

        Camera.Parameters params = camera.getParameters();
        params.setRotation(90);
        camera.setParameters(params);

        camera.takePicture(null, null, imageCallback);

    }

}

Here is the Class which I am using to Capture Image 这是我用来捕获图像的类

CameraCaptureActivity.java: CameraCaptureActivity.java:

CameraSurfaceView cameraSurfaceView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_camera_capture);   

        // set up our preview surface
        FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
        cameraSurfaceView = new CameraSurfaceView(this);
        preview.addView(cameraSurfaceView);

        // grab out shutter button so we can reference it later
        shutterButton = (Button) findViewById(R.id.btnCapture);
        shutterButton.setOnClickListener(this);
}

@Override
    public void onClick(View v) {
        takePicture();
    }

    private void takePicture() {
        shutterButton.setEnabled(false);
        cameraSurfaceView.takePicture(this);
    }

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        // TODO something with the image data

        File pictureFileDir = getDir();

        if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {

            return;

        }

        simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        strDateFormat = simpleDateFormat.format(new Date());

        String photoFile = strRecordName+strDateFormat+".jpg";

        String filename = pictureFileDir.getPath() + File.separator + photoFile;

        File pictureFile = new File(filename);

        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
            Toast.makeText(CameraCaptureActivity.this, "Image saved:" + photoFile,
                    Toast.LENGTH_LONG).show();

            // Restart the preview and re-enable the shutter button so that we can take another picture
            camera.stopPreview();
            shutterButton.setEnabled(false);                  

        } catch (Exception error) {            
            Toast.makeText(CameraCaptureActivity.this, "Image could not be saved.",
                    Toast.LENGTH_LONG).show();
        }
    }

    private File getDir() {
        File sdDir = Environment
          .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        return new File(sdDir, "CustomCamera");
    }


    public void onResume() 
    {
        super.onResume();
        shutterButton.setEnabled(true);
    }

Do like 喜欢

@Override
public void onPictureTaken(byte[] data, Camera camera) {

    Bitmap pic = BitmapFactory.decodeByteArray(data, 0, data.length);

    //Rotate the image by 90 degrees before we save it
    Matrix matrix = new Matrix();
    matrix.postRotate(90);
    pic = Bitmap.createBitmap(pic , 0, 0, pic.getWidth(), pic.getHeight(), matrix, true);

     ........
     FileOutputStream fos = new FileOutputStream(pictureFile);
     pic.compress(Bitmap.CompressFormat.PNG, 90, fOut);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM