Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JPG图像作为位图上传到Android Studio时,图像的分辨率是否丢失?_Java_Android_Opencv_Image Processing_Bitmap - Fatal编程技术网

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

Java 将JPG图像作为位图上传到Android Studio时,图像的分辨率是否丢失?,java,android,opencv,image-processing,bitmap,Java,Android,Opencv,Image Processing,Bitmap,我正在开发一个Android应用程序,它可以查看图像的不同属性。我注意到,如果我从尺寸为1920x1080的JPG图像开始,通过打开图库并选择适当的图像,将该图像作为位图上传到我的应用程序中,则位图尺寸为1024x576。我没有为位图声明宽度或高度,尽管我最终将位图设置为imageView,但在此之前,当我在代码中设置断点时,尺寸仍然很低 我的图像会失去分辨率吗 如何在不牺牲分辨率的情况下将图像导入位图 下面是我从手机外部存储器将图像导入应用程序的代码 public void openGalle

我正在开发一个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();
        }
    }
}


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

回答您的问题:不会丢失分辨率

我想你被Android Studio“查看位图”窗口上一个非常混乱的显示误导了。它不会以像素为单位显示位图的实际大小。我不确定那到底是什么(任何人?);可能是dp
dp

很明显,“查看位图”图像正在进行下采样。这就是为什么像素在你看来不同。预览窗口绝对不会以与
位图
对象内存中存在的图像保真度相同的保真度显示图像

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

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

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

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

使用JPEG也会影响图像质量。您可以创建一个简单的例程,在客户端将1920x1080 JPG转换为1920x1080 BMP。然后可以将BMP文件发送到服务器端。这可能是一个在数据传输阶段不牺牲分辨率的可行演练。@Employee我认为我的问题比你想象的要简单。我确实通过wifi交换数据,但对于这个特定问题,我正在查看下载到手机上的图像。它们来自同一来源,并自动保存为1920x1080 JPG文件。我只是不明白为什么上传图像时我的尺寸会改变。您是如何确定
imageBitmap
为1024x576的?@greeble31调试时可以看到尺寸的。我第一次注意到的时候,我正在看一张裁剪的图片。你说得对。我使用getWidth和getHeight检查了位图的宽度和高度,它们与jpg尺寸匹配。非常感谢。