【问题标题】:Android Bitmap.Compress saves image of Low Quality and Scaled down imageAndroid Bitmap.Compress 保存低质量和缩小图像的图像
【发布时间】:2019-09-24 17:50:52
【问题描述】:

我正在尝试制作一个应用程序,它可以拍照并将另一个图像(如徽标)嵌入到原始图像上。但是我在初始阶段有一个问题。

我正在尝试保存从 onActivityResult 接收到的位图中的图像以用于相机意图。但是使用下面的代码后,图像被缩小和压缩太多,看起来很糟糕。有人可以帮我保留图片质量和大小吗?

以下是应用保存的图片:

   public void saveBitmapToGallery(Bitmap bm,String picturename){
        String root = Environment.getExternalStorageDirectory().toString();
        File mydir = new File(picturepath);
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        displayheight = dm.heightPixels;
        displaywidth = dm.widthPixels;
        File file = new File(mydir, picturename+".JPG");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bm.createScaledBitmap(bm,displaywidth,displayheight,true);
            bm.compress(Bitmap.CompressFormat.JPEG,100, fos);
            fos.flush();
            fos.close();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }

    }

我希望有一个像普通相机应用一样的图像,这样我就可以在我的应用保存高质量图像后嵌入徽标。

【问题讨论】:

    标签: android android-studio bitmap android-bitmap


    【解决方案1】:

    图片没有转换成字节输出

    另外,请为此访问我的 Github 个人资料 https://github.com/axarlotwala/CafeDelearenter code here

    // 使用意图打开文件选择器选项

    private void ShowFileChooser() {
    
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Picture"),PICK_IMAGE_REQUEST);
    
    }
    

    // 在 imageview 中显示选择和路径图像

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        PATH = data.getData();
    
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),PATH);
            cat_image.setImageBitmap(bitmap);
            tv_path.setText("Path : " .concat(GetPath(PATH)));
    
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }
    
    //get correct path of image
    private String GetPath(Uri uri){
    
        String result;
        Cursor cursor = getActivity().getContentResolver().query(uri,null,null,null,null);
        if (cursor == null){
            result = uri.getPath();
        }else {
    
            cursor.moveToFirst();
            int id = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
            result = cursor.getString(id);
            cursor.close();
        }
    
        return result;
    }
    

    【讨论】:

    • 您好,谢谢您的帮助。但我不明白你为什么提到路径?我从相机意图中获取图片,并且我有需要保存的图像的位图,但是当我使用我提到的代码保存时,图像被缩小太多并且有一张很小的图片。我希望你能理解我的问题。
    • 路径是交叉检查您选择的图像是否正确..用于AlterNet测试目的我已经使用它
    【解决方案2】:

    好吧,我知道输出图像出了什么问题。我们需要使用 EXTRA_OUTPUT 来将图片保存为全尺寸,否则只保存一个缩略图。

    这是我们在开始相机活动以获得结果之前需要做的事情

    if (picturefile != null) {
                    Uri pictureUri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() +
                            ".provider", picturefile);
                    imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri); //This makes the image to save in full rather than just a low quality scaled-down thumbnail.
                }
    
                startActivityForResult(imageIntent, REQUEST_IMAGE_CAPTURE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2012-07-27
      • 2018-02-16
      • 1970-01-01
      • 2012-06-22
      相关资源
      最近更新 更多