【问题标题】:Bizarre ImageView Bitmap Handling奇怪的 ImageView 位图处理
【发布时间】:2012-01-21 03:55:29
【问题描述】:

我在 Android 将位图加载到 ImageView 的方式中遇到了完全奇怪的行为。例如,我有一个名为 urimg_01.jpg 的 500x313 图像文件。使用此代码:

        img.setImageResource(R.drawable.urimg_01);
        Bitmap bitmap = ((BitmapDrawable) img.getDrawable()).getBitmap();
        Log.v(TAG,"---------------------> bitmap width = "+bitmap.getWidth());
        Log.v(TAG,"---------------------> bitmap height = "+bitmap.getHeight());

ImageView 位图为 750x470。 (我有一台 480x800 显示屏的 Nexus S。)

使用此代码,它读取位于 getFilesDir() 中的同一文件的副本:

            Log.v(TAG,"image file is "+filelist[0].getAbsolutePath());
            FileInputStream fis = new FileInputStream(filelist[0]);
            FileDescriptor fd = fis.getFD();
            Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd);
            if (bitmap != null) {
                Log.v(TAG,"---------------------> bitmap width = "+bitmap.getWidth());
                Log.v(TAG,"---------------------> bitmap height = "+bitmap.getHeight());
                img.setImageBitmap(bitmap);
                fis.close();
            }

ImageView 位图是 500x313,正如预期的那样。

在 setImageResource() 的情况下,它是从哪里得到 750x470 的?以及如何让它在可绘制资源中使用正确的尺寸?

【问题讨论】:

    标签: android


    【解决方案1】:

    您的资源正在扩大,因为它可能存储在中等密度的文件夹中,并且您使用的是高密度设备。详情请见Bitmap getWidth returns wrong value

    【讨论】:

      【解决方案2】:

      在这里你得到你的位图

      Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd);
      

      现在根据设备的高度和宽度进行缩放

           Display display=this.getWindowManager().getDefaultDisplay();
          int w=display.getWidth();
          int h=display.getHeight();
          Bitmap newBitmap=Bitmap.createScaledBitmap(oldBitmap, w, h, false);
          //now setImage to background with new Bitmap
      

      一个重要的东西“this”应该是活动上下文 :) 干杯

      【讨论】:

        猜你喜欢
        • 2012-06-14
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 2019-06-11
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        相关资源
        最近更新 更多