【问题标题】:android save bitmap without compressionandroid保存位图不压缩
【发布时间】:2015-04-23 08:31:13
【问题描述】:

我正在开发安卓系统。我需要保存一个不丢失质量的位图。

我已经尝试使用位图的compress() 方法,将质量设置为100。这对我不起作用,位图质量损失太多。我已经测试了 JPEG 和 PNG 格式。

我已测试将位图复制到ByteBuffer,然后提取byte[] 并使用FileOutputStream 保存它。在这种情况下,我无法显示使用这种方式保存的图像,我只能看到一个空白页面。

我的问题是,有什么方法可以将位图保存在 SD 卡中而不进行压缩?

编辑:这是我的代码的一部分

public class MainActivity extends ActionBarActivity {

    [...]

    @Override
    protected void onActivityResult(int reqCode, int resCode, Intent handler){
        super.onActivityResult(reqCode, resCode, handler);
        if(reqCode == CAPTURE_IDENTIFIER && resCode == Activity.RESULT_OK){
// THis is that I have tested.
//          Object o = handler.getData();
//          Object o2 = handler.getExtras().getParcelable("data");
//          Object o3 = handler.getExtras().get("data");
//          Object o4 = handler.getParcelableExtra("data");
//          
            prepareCapture();
            startActivityForResult(cameraHandler, CAPTURE_IDENTIFIER);
        }
    }



    private void initCamera(){
        cameraHandler = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        cameraHandler.putExtra("return-data", true);
    }

    private void prepareCapture(){
        currentPhotoName = getNextImageIdentifier() + IMG_BASE_NAME;
        File image = new File(capturesFolder, currentPhotoName);
        Uri uriImage = Uri.fromFile(image);
        cameraHandler.putExtra(MediaStore.EXTRA_OUTPUT, uriImage);
    }



}

我检测到的异常是: RuntimeException: 传递结果 ResultInfo 失败 [...] NullPointerException

编辑2: 我实际要做的:

我必须用相机拍照,然后在保存之前,我必须对其进行处理。之后,我必须将其保存在 SD 卡中。但是画质很重要,低画质的我不能保存,至少不要太低画质。

【问题讨论】:

  • “我需要保存一个不丢失质量的位图”——PNG 是一种无损格式。
  • 我测试了 JPEG 和 PNG 格式(Bitmap.compress 的可用格式),质量 = 100,质量都较低。
  • 那么您的问题不在于压缩,而在于您如何创建Bitmap 或您如何确定“较低质量”。
  • 我只使用对象来检查意图是否返回了我的东西
  • 你能开始解释你的代码应该做什么而不是谈论位图。您的代码中没有位图。

标签: java android bitmap


【解决方案1】:

如果您使用的是 IMAGE_CAPTURE,则必须设置一个标志以不返回缩略图。

没有看到你的代码,我只能猜测。

文档:

Image Capture Reference

文档引用:

如果 EXTRA_OUTPUT 不存在,则为小尺寸图像 在额外字段中作为 Bitmap 对象返回

这是一个很常见的错误,如果是其他问题,请说明。

【讨论】:

  • 我没有EXTRA_OUTPUT,因为如果我使用它,当我尝试在“onActivityResult”中获取图像时,getData() 和getExtra("data") 都返回null。
  • 不,不是两者兼而有之。只有参数 Intent data==null。
  • 现在我什至无法执行 getData() 或 getExtras.getParceable("data"),出现异常。
  • 确实如此。什么样的异常?你为什么忽略这么重要的信息? getData() 也没有足够的信息。在这种情况下显示整个语句。
  • 我添加了其他信息。我试图避免它,因为我认为它是保存未压缩位图的一些功能,这样就不需要信息了。
【解决方案2】:

我已经阅读了谷歌文档,这是我所理解的,但我不确定 100%:

从安卓相机获取未压缩图像的唯一方法是将其保存在 SD 卡中。然后,如果您想使用它,请从 SD 获取。

确实,由于意图只能“传输”“小”尺寸的对象,因此无法使用意图在 Activity 之间传递未压缩的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2014-01-03
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多