Android 保存到SD之前缩放相机图片大小的最佳方法

Android 保存到SD之前缩放相机图片大小的最佳方法,android,bitmap,jpeg,Android,Bitmap,Jpeg,调用TakePicture后,以下代码作为jpeg图片回调执行。如果我将数据保存到磁盘,它是1280x960 jpeg。我已尝试更改图片大小,但这是不可能的,因为不支持更小的大小。JPEG是唯一可用的图片格式 PictureCallback jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream out = null

调用TakePicture后,以下代码作为jpeg图片回调执行。如果我将数据保存到磁盘,它是1280x960 jpeg。我已尝试更改图片大小,但这是不可能的,因为不支持更小的大小。JPEG是唯一可用的图片格式

 PictureCallback jpegCallback = new PictureCallback() {
  public void onPictureTaken(byte[] data, Camera camera) {
   FileOutputStream out = null;
   Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); 
   Bitmap sbm = Bitmap.createScaledBitmap(bm, 640, 480, false);
数据。长度大约是预期的500k。执行BitmapFactory.decodeByteArray()后,bm的高度和宽度为-1,因此操作似乎失败

  • 我不清楚位图是否能处理jpeg数据。我不这么认为,但我有一些代码示例似乎表明了这一点
  • 在解码和缩放之前,数据是否需要为位图格式
  • 如果是,如何做到这一点

谢谢

在surfaceCreated上,您可以对camara的图片大小进行编码设置,如下代码所示:


public void surfaceCreated(SurfaceHolder holder) {
        camera = Camera.open();
        try {
            camera.setPreviewDisplay(holder);
            Camera.Parameters p = camera.getParameters();
            p.set("jpeg-quality", 70);
            p.setPictureFormat(PixelFormat.JPEG);
            p.setPictureSize(640, 480);
            camera.setParameters(p);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

在surfaceCreated上,您可以对camara的图片大小进行编码设置,如下所示:


public void surfaceCreated(SurfaceHolder holder) {
        camera = Camera.open();
        try {
            camera.setPreviewDisplay(holder);
            Camera.Parameters p = camera.getParameters();
            p.set("jpeg-quality", 70);
            p.setPictureFormat(PixelFormat.JPEG);
            p.setPictureSize(640, 480);
            camera.setParameters(p);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }