Android 调整自动旋转的位图的大小

Android 调整自动旋转的位图的大小,android,bitmap,resize,autorotate,Android,Bitmap,Resize,Autorotate,我有一个代码,在该代码中,我调用gallery来选择我在imageview中显示的图像。这可以很好地工作并保持纵横比。 问题是当图像大小大于2048 x 2048时 在这种情况下,我使用此代码: //... int height = uriIsNowAbitmap.getHeight(); int width = uriIsNowAbitmap.getWidth(); if ((width>=204

我有一个代码,在该代码中,我调用gallery来选择我在imageview中显示的图像。这可以很好地工作并保持纵横比。 问题是当图像大小大于2048 x 2048时 在这种情况下,我使用此代码:

              //...

          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);
uriIsNowAbitmap= MediaStore.Images.Media.getBitmap(this.getContentResolver(), 选择eImage(URI)

              //...

          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);
}

              //...

          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);
也可以正常工作,但有问题。图像不是所示的类型

              //...

          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);
为了解释,我举了这个例子。这是画廊的图片:

              //...

          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);

              //...

          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时,会旋转显示:

              //...

          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);

              //...

          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);
我不明白为什么。我已经尝试了一千种方法,阅读了很多关于调整大小的信息,我已经阅读了这个网站()的线程和示例代码,还有更多。。。但没有任何帮助。 其目的是以这种方式显示……使用photoshop制作:)

              //...

          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);

              //...

          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);
我很感激任何帮助,花了很多时间试图修复它

              //...

          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);

关于

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

              //...

          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);
使用活动的OnConfiguration Changed方法检测方向的更改。请参阅以下代码:

              //...

          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);
@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,请参见下面的代码:

              //...

          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);
<activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">


不幸的是,您提出的解决方案无法正常工作,因为同样的情况仍然存在。非常感谢您的关注。还有其他想法吗?@MiguelC你能发布更多的代码吗,最好是这个问题出现的整个活动?你解决了吗?我也有同样的问题。你是如何处理这个问题的??