1

我有一个代码,我在其中调用画廊来选择我在 imageview 中显示的图像。这工作正常并保持纵横比。问题是当图像尺寸大于 2048 x 2048 时,我正在使用此代码:

uriIsNowAbitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);

              //...

          int height = uriIsNowAbitmap.getHeight();
          int width = uriIsNowAbitmap.getWidth();

          if ((width>=2048)||(height>=2048)) {

              int newheight  = height/10; // height in pixels
              int newwidth = width/10; // width in pixels    
              Bitmap avatarScaled = Bitmap.createScaledBitmap(uriIsNowAbitmap,  newwidth, newheight, true);

              previewNewAvatar.setImageBitmap(avatarScaled);

}

也可以正常工作,但有问题。图像不是旋转横向显示的类型

为了解释,我举了这个例子。这是画廊的图片:

在此处输入图像描述

当我选择图片并将其分配给 imageview 时显示旋转:

在此处输入图像描述

我不懂为什么。我已经尝试了一千种方法并阅读了很多关于调整大小的信息,我已经阅读了这个网站的线程和示例代码(Android:高质量图像调整大小/缩放)等等......但没有任何帮助。目的是以这种方式展示......用photoshop制作:)

在此处输入图像描述

我很感激任何帮助,花了很多时间试图修复它

问候

4

1 回答 1

0

首先,您必须检测方向变化,当检测到横向变化时,您只需相应地旋转位图。您必须将您的 Bitmap avatarScaled 声明为全局变量,以便在下面的 onConfigurationChanged() 方法中访问它:

使用 Activity 的 onConfigurationChanged 方法来检测方向的变化。请参阅以下代码:

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap rotated = Bitmap.createBitmap(avatarScaled, 0, 0, avatarScaled.getWidth(),
                                     avatarScaled.getHeight(), matrix, true);
previewNewAvatar.setImageBitmap(rotated);
} 
}

您还必须在清单文件中编辑适当的元素以包含 android:configChanges 只需查看以下代码:

<activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">
于 2012-08-18T22:16:13.513 回答