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

Mar*_*phy 1 android jpeg bitmap

调用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);
Run Code Online (Sandbox Code Playgroud)

data.Leng是预期的500k.执行BitmapFactory.decodeByteArray()后,bm的高度和宽度为-1,因此操作失败.

  • 我不清楚Bitmap是否可以处理jpeg数据.我想不会,但我似乎有一些代码示例似乎表明它是.
  • 在解码和缩放之前,数据是否需要采用位图格式?
  • 如果是这样,怎么办?

谢谢!

Jam*_*hoo 5

在您的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();
        }
    }