android保存位图而不压缩

时间:2015-02-21 18:37:04

标签: java android bitmap

我正在开发android。我需要保存位图而不会丢失质量。

我尝试使用位图的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

EDIT2: 我必须要做的事情:

我必须用相机拍照,然后在保存之前,我必须处理它。之后,我必须将其保存在SD卡中。但是图像质量非常重要,我无法以低质量保存,或至少质量不低。

2 个答案:

答案 0 :(得分:1)

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

从Android摄像头获取未压缩图像的唯一方法是将其保存在SD卡中。然后,如果你想使用它,请从SD获取它。

实际上,由于意图只能“传输”“小”大小的对象,因此无法通过使用意图在活动之间传递未压缩的图像。

答案 1 :(得分:0)

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

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

文档:

Image Capture Reference

  

文档引用:

     

如果EXTRA_OUTPUT不存在,则表示小尺寸图像   在额外字段

中作为Bitmap对象返回

这是一个非常常见的错误,请澄清是否是其他内容。