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

}

も正しく動作しますが、問題があります。画像は回転した横向きのタイプではありません

説明するために、この例を挙げます。これはギャラリーの写真です:

ここに画像の説明を入力

画像を選択してイメージビューに割り当てると、回転して表示されます。

ここに画像の説明を入力

私はなぜなのか理解していない。私は何千もの方法を試し、サイズ変更に関する多くの情報を読みました。この Web サイトのスレッドとサンプル コード ( Android: 高品質の画像のサイズ変更/スケーリング) などを読みましたが、何も役に立ちません。意図はこのように表示することです...フォトショップで作成してください:)

ここに画像の説明を入力

助けてくれてありがとう、それを修正するのに何時間もかかりました

よろしく

4

1 に答える 1

0

まず、向きの変更を検出する必要があります。横向きへの変更を検出すると、それに応じてビットマップを回転させるだけです。以下の onConfigurationChanged() メソッドで Bitmap avatarScaled にアクセスするには、Bitmap avatarScaled をグローバル変数として宣言する必要があります。

方向の変化を検出するには、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 に答える