当前位置: 首页 > 知识库问答 >
问题:

将位图保存到Android存储而不丢失质量

宗政霄
2023-03-14

现在我有一个打开手机摄像头应用程序的意图,允许用户拍照,然后带着新图像回到我的应用程序。有了这个,它返回一个位图。为了获得图片的Uri,以便我可以将ImageView设置为它,我相信我必须先将其保存到存储。唯一的问题是当我的应用程序打开它时,图像质量非常差。在我必须压缩的部分,我保持了100的质量,所以我不确定我做错了什么。

以下是我如何启动照相机的意图:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(takePictureIntent, TAKE_PICTURE_INTENT_CODE);
}

以下是我如何处理它:

//get result of image choosing
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);

    switch(requestCode) {

        case TAKE_PICTURE_INTENT_CODE:
            if(resultCode == RESULT_OK){
                Bundle extras = data.getExtras();
                Bitmap imageBitmap = (Bitmap) extras.get("data");
                try {
                    switchToCropFrag(createImageFileFromCamera(imageBitmap));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if (resultCode != RESULT_CANCELED){
                Toast.makeText(this, "Failed to get image, please try again.", Toast.LENGTH_LONG).show();
            } else {    //user cancelled image picking
        }
    }
}

private Uri createImageFileFromCamera(Bitmap imageBitmap) throws IOException {
        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        File directory = cw.getDir("temp", Context.MODE_PRIVATE);
        // Create imageDir
        File path = new File(directory, "temp.png");

        FileOutputStream fos = null;
        try {

            fos = new FileOutputStream(path);

            // Use the compress method on the BitMap object to write image to the OutputStream
            imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return Uri.fromFile(path);
    }

对于switchToCropFrag,它只是使用毕加索设置图像。当我让用户从他们的手机中选择一张已经在多媒体资料中的照片时,图像质量很好。

共有1个答案

丘普松
2023-03-14

有了这个,它返回一个位图

它返回一个缩略图。引用文件:

如果额外_输出不存在,则在额外字段中以位图对象的形式返回一个小尺寸图像

您似乎认为它返回的是常规大小的图像,而事实并非如此。

为了获取图片的Uri,以便我可以将ImageView设置为它,我相信我必须首先将其保存到存储器中。

如果这是活动中的ImageView,则不需要Uri调用setImageBitmap()

 类似资料:
  • 我正在做一个应用程序,用相机拍照,然后旋转和缩放。我需要旋转图像,因为相机返回错误的旋转图像,我需要缩放它以减小其大小。我首先将相机返回的原始图像保存在临时目录中,然后读取并进行修改,将新图像保存到新文件中。我尝试使用矩阵来旋转和缩放图片,但它失去了质量。然后我试着先用位图来缩放它。创建缩放位图,然后使用矩阵旋转,但结果比仅使用矩阵的结果更糟糕。然后我尝试先旋转它,然后使用“始终位图”调整大小。创

  • 问题内容: 我正在显示一组图像,然后,如果用户希望,可以将图像保存到SD卡。我需要将其保存到外部存储的帮助。有人可以帮我这个忙吗? 网格视图: ImageAdapter: 问题答案: 嗨,我还没有使用过作为应用程序一部分提供的代码,但是我确实使用它来调试了其中一个应用程序在运行时生成的位图。 使用此代码,只要您有位图,就只需要此+清单权限 希望能帮到您 杰森

  • 我在Android上工作。我需要保存一个没有质量损失的位图。 我使用位图的方法进行了尝试,将质量设置为100。这对我不起作用,位图失去了太多的质量。我已经测试了JPEG和PNG格式。 我已经测试过将位图复制到,然后提取,并使用保存它。在这种情况下,我无法显示用这种方式保存的图像,我只看到一个空白页。 我的问题是,有没有办法在不压缩的情况下将位图保存在SD卡中? 编辑:这里我的代码的一部分 我检测到

  • 我尝试用以下代码保存从internet下载的文件 但在运行时,我得到的错误如下 03-04 20:42:51.080 8972-8972/com.example.me.demo2 E/BitmapFactory:无法解码流:java.io.FileNotFoundExcoop: /storage/emulated/0/.tanks/4a100abb-0e55-4062-8c37-f11f4189e

  • 我创建了一个简单的应用程序,裁剪图像。现在我想保存这个图像到消防基地。 如何将此图像保存到Firebase。我尝试了很多教程,但都没有成功。请用简单的代码验证。

  • 我一直在使用系统保存截图的方式将位图保存到磁盘和图库中。这在Android4.2及之前版本中有效,但在Android3.3中无效。 相关代码: 此处为完整代码。 然而,在4.3(新的Nexus 7)中,我在第二行得到了FileNotFoundException。我在网站上看不到与此相关的4.3中的任何更改。 那么,将图像保存到磁盘和图库的正确方法是什么呢? 已验证: 使用此方法装载存储 image