java - 将 JPG 图像作为位图上传到 Android Studio 时图像分辨率是否丢失?

标签 java android opencv image-processing bitmap

我正在开发一个查看图像不同属性的 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 调试器允许查看位图,但不能复制或保存位图,所以我能做的最好的事情就是在屏幕上打开两个图像时打印屏幕。

最佳答案

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

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

“查看位图”图像也很明显正在被缩减采样。这就是像素对您来说看起来不同的原因。预览窗口绝对以与您的Bitmap 对象内存中存在的保真度相同的保真度呈现图像。

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

如果您不相信我,请注意您发布的图像中的最底部有一条线索。很难看到,但您可以看出 imageBitmap 的 mBuffer 的长度为 8294400 字节。

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

(我在自己的盒子上测试过,我能够重现这个问题。相信我——实际的 Bitmap 是全尺寸的,没有数据丢失。)

关于java - 将 JPG 图像作为位图上传到 Android Studio 时图像分辨率是否丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53508979/

相关文章:

java - Gradle不创建库(minecraft forge mdk)

java - Android 上的时间解析问题

Android-如何在intentservice里面实现TCP-ip client

Android:罕见且不可重现的 ClassNotFoundException

python - 使用 python openCV 从 IP 摄像机流式传输问题

java - Java 中 8x8 网格的广度优先搜索

java - 无法使用 scriptlet 将 HTML 结构构建到 JSP 中

c++ - OpenCV : imwrite changes the channels pixels values when saving

ios - 对具有明亮区域的图像进行阈值处理

java - 如何从源文件中提取JavaDoc注释