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

时间:2010-10-18 18:08:47

标签: android bitmap jpeg

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

data.Length就像预期的那样500k。执行BitmapFactory.decodeByteArray()后,bm的高度和宽度为-1,因此操作失败。

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

谢谢!

1 个答案:

答案 0 :(得分: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();
        }
    }