拍照并保存到 SD 而不损失质量

Posted

技术标签:

【中文标题】拍照并保存到 SD 而不损失质量【英文标题】:Taking a photo and saving to SD without loss of quality 【发布时间】:2013-04-07 01:06:53 【问题描述】:

我有那个应用程序可以拍照并将其存储到 SD 卡中,但是我拍摄的每张照片都非常压缩且质量非常低。我以全质量压缩它,所以我不确定它为什么要这样做。有什么建议么?代码如下:

protected void takePhoto()

    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 0); 


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
    super.onActivityResult(requestCode, resultCode, data);
    currPhoto = (ImageView) findViewById(R.id.imageView1);

    if (requestCode== 0 && resultCode == Activity.RESULT_OK)
        Bitmap x = (Bitmap) data.getExtras().get("data");
        currPhoto.setImageBitmap(x);
        ContentValues values = new ContentValues();
        values.put(Images.Media.MIME_TYPE, "image/jpeg");
        Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
        OutputStream outstream;
        try 
            outstream = getContentResolver().openOutputStream(uri);

        x.compress(Bitmap.CompressFormat.JPEG, 90, outstream);
        outstream.close();
         catch (FileNotFoundException e) 
            //
        catch (IOException e)
            //
        
    

编辑:实际上它似乎只将缩略图保存到 SD。

【问题讨论】:

【参考方案1】:

来自documentation:

公共静态最终字符串ACTION_IMAGE_CAPTURE

API level 3 中添加了可以发送到的标准 Intent 操作 相机应用程序捕获图像并将其返回。

调用者可能会传递一个额外的EXTRA_OUTPUT 来控制此图像的位置 将被写入。如果EXTRA_OUTPUT 不存在,那么一个小的 大小的图像作为额外字段中的位图对象返回。这是 对于只需要小图像的应用程序很有用。 如果 EXTRA_OUTPUT 存在,然后将全尺寸图像写入 EXTRA_OUTPUT 的 Uri 值。

【讨论】:

太棒了,谢谢,这帮助我理解了它。对于其他有同样问题的人this link 是我需要的代码。

以上是关于拍照并保存到 SD 而不损失质量的主要内容,如果未能解决你的问题,请参考以下文章

将 WPF 画布保存到文件而不损失质量(不使用位图作为中介)

Android在保存到SD卡之前拍照并调整大小

我做了一个启动相机的PhoneGap应用程序,拍照并保存到SD卡。如何让该图片以 HTML 格式显示?

华为手机拍照后保存不了怎么办

拍照而不将照片保存到画廊?

在 Android 上使用 Camera API 尽可能快地拍照