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

标签 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 数据。我不这么认为,但我似乎有一些代码示例似乎表明它是。
  • 在解码和缩放之前数据是否需要为位图格式?
  • 如果可以,该怎么做?

谢谢!

最佳答案

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

关于android - 在保存到 SD 之前缩放相机图片大小的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3962030/

相关文章:

java - Android 操作栏文本自定义颜色

android - BitmapFactory.decodeFile() 不适用于 Adob​​eImageIntent.EXTRA_OUTPUT_URI

java - 如何从重写的 setImageBitmap() 中获取 ImageView 的大小

Python PIL jpeg 质量

带有两个拇指的 Android Seekbar

android - 在代码下方运行时,GC 因 GC_CONCURRENT 而发疯

delphi - 在调用 Canvas.DrawBitmap (Firemonkey) 之前对位图应用转换

ios - UIImagePickerController 返回比原始图像更大的图像

jpeg - JPEG标记0xb9是什么?

android - 如何识别我的应用程序是否被用户设置为默认?