2010-10-18 77 views
1

以下代码在TakePicture被调用后执行为jpeg图片回调。如果我将数据保存到磁盘,则它是1280x960 jpeg。我试图改变图片尺寸,但这是不可能的,因为不支持更小的尺寸。 JPEG是唯一可用的图片格式。保存为SD之前缩放摄像头图片尺寸的最佳方法

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); 

data.Length与预期的一样是500k。在执行BitmapFactory.decodeByteArray()之后,bm的高度和宽度都是-1,所以看起来操作失败。

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

谢谢!

回答

5

在您surfaceCreated,你代码中设置卡马拉的图片大小,如下面的代码:


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