java - android 不压缩保存位图

标签 java android bitmap

我正在开发安卓系统。我需要保存一张没有质量损失的位图。

我已经尝试使用位图的 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 卡中。但图像质量非常重要,我不能以低质量保存它,或者至少不要太低质量。

最佳答案

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

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

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

关于java - android 不压缩保存位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28649699/

相关文章:

java - 为什么 Firebase 实时数据库未更新?

c++ - 从内存中获取 jpeg 的大小(使用 GDI++ 转换)

android - SVG 数据 URI 到位图

java - 打包到 jar/exe 后 SIGAR API 不工作

java - 如何指定使用Spring Cloud Stream向RabbitMQ发送消息的超时?

java - 在 Jtables 查询之间切换焦点?

java - 带 Spring @Async 注解的方法未执行

Android ListFragment 错误

java - 在android中创建xml文档

android - 使用函数参数按名称检索可绘制资源