【问题标题】:Is resolution of an image lost when uploading a JPG image into Android Studio as a bitmap?将 JPG 图像作为位图上传到 Android Studio 时,图像的分辨率会丢失吗?
【发布时间】:2019-04-29 17:50:01
【问题描述】:

我正在开发一个查看图像不同属性的 Android 应用程序,我注意到如果我从尺寸为 1920x1080 的 JPG 图像开始,然后通过打开图库并选择适当的图像将该图像作为位图上传到我的应用程序中,位图尺寸为 1024x576。我没有声明位图的宽度或高度,虽然我最终将位图设置为 imageView,但是当我在代码中设置断点之前,尺寸仍然很低。

我的图像会失去分辨率吗?

如何在不牺牲分辨率的情况下将图像作为位图导入?

以下是将我的图像从手机外部存储导入我的应用程序的代码

public void openGallery(View v){

     runStop = false;
    mHandler.removeCallbacks(mStartScan);
    mStreamButton.setText("Start stream");

    Intent myIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(myIntent, 100);

    ppm = 0;
    numberOfDots = 0;

    if (countParticles.equals(true)){
        mDots.setText(null);
        mPpm.setText(null);
    }



    uploadedImage = true;

    //listItems.clear();
   // mAdapter.notifyDataSetChanged();

}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 100 && resultCode == RESULT_OK && data!=null){
        Uri imageUri = data.getData();
        try{
            imageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);
        }catch (IOException e)
        {
            e.printStackTrace();
        }

        mImageView.setImageBitmap(imageBitmap);

        if (processImage.equals(true)){
            convertToGray();
        }
    }
}

Crude comparison of images

下面是两个相同点的放大比较。 Android Studio 调试器允许查看位图,但不能复制或保存,所以我能做的最好的就是打印屏幕,同时在我的屏幕上打开两个图像。

【问题讨论】:

  • 使用 JPEG 也会影响图像质量。
  • 您可以创建一个简单的例程,在客户端将 1920x1080 JPG 转换为 1920x1080 BMP。然后您可以将 BMP 文件发送到服务器端。这可能是在数据传输阶段不牺牲分辨率的一种可能的解决方法。
  • @Employee 我认为我的问题比你想象的要简单。我确实通过 wifi 交换数据,但对于这个特定问题,我正在查看下载到手机上的图像。它们来自同一来源并自动保存为 1920x1080 JPG 文件。我只是不明白为什么上传图片时我的尺寸会改变
  • 您如何确定imageBitmap 是1024x576?
  • @greeble31 调试时可以看到大小。我第一次注意到是在考虑裁剪其中一张图片时发现的。

标签: java android opencv image-processing bitmap


【解决方案1】:

回答您的问题:没有丢失任何分辨率。

我认为您被 Android Studio“查看位图”窗口上的一个非常混乱的显示误导了。它不以像素为单位显示位图的实际大小。我不确定那是什么(有人吗?);也许是dp

也很明显,“查看位图”图像正在被下采样。这就是为什么像素看起来与您不同的原因。预览窗口肯定不会以与Bitmap 对象内存中存在的保真度相同的保真度呈现图像。

检查Bitmap's 实际尺寸的更好方法是查看mWidthmHeight 成员,或使用Bitmap.getWidth()/getHeight()

如果您不相信我,请注意您发布的图片底部有一条线索。很难看到,但你可以看出 imageBitmap's mBuffer 是 8294400 字节长。

1920 x 1080 x 4 (bytes per pixel) = 8294400

(我在自己的机器上对此进行了测试,我能够重现该问题。相信我——实际的Bitmap 是全尺寸的,没有数据丢失。)

【讨论】:

  • 你是对的。我使用 getWidth 和 getHeight 检查了位图的宽度和高度,它们与 jpg 尺寸相匹配。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2018-04-27
  • 1970-01-01
相关资源
最近更新 更多