【anadroidJava】続・ExifInterfaceで画像の向きを変える

  • 2019年1月17日
  • Java

ExifInterface記事の三回目になります。

前回はExifInterfaceクラスを使って画像の向きを取得していたと思いますが、今回はその画像の向き情報を使って

実際に向きを正しい位置に変えて表示するコードを書いてみようと思います。

まず、通常通りメソッドを書きますが、ここでの引数は前回取得した画像の向き情報が入っている変数locatateになります。

<pre>public void replace(int locatate,Bitmap bitmap){
//ここに処理を書きます
}</pre>

二つ目の引数は、このメソッドを叩く前に取得したBitmapのデータになります。

つまり、まだ正しい向きに修正されていない画像が変数に入っている状態ですね。

ここで実際に向きを変える工程に入りますが、まず最初にMatrixクラスをnewします。

画像を動的に編集する手段は枚挙に暇がありませんが、このMatrix拡大・縮小・回転など画像に関するアクションを全て揃えており

androidで画像をいじるときはよく重宝して使っています。

このmatrixを使う前にswitch文を使って角度別に処理を分けていきたいと思います。

case別で90,180,270とありますが、これは前回のORIENTATION_ROTATE_〇〇に合わせて指定した角度に修正するように

制御しており、引数のlocatateが90ならば一番最初のcase90で処理を受けて加工されていきます。

ORIENTATION_ROTATE_〇〇なんてわかりにくいという方も見受けられますが、慣れてくれば「ああこの角度に修正すればいいのね。」

みたいに感覚で慣れてくると思います。

public void replace(int locatate,Bitmap bitmap){
<pre>    int imageWidth = bitmap.getWidth();
    int imageHeight = bitmap.getHeight();
    Bitmap bitmap2;
    // Matrix インスタンス生成
    Matrix matrix = new Matrix();</pre>
<pre>     switch (locatate) {
        case 90:
            matrix.setRotate(90, imageWidth/2, imageHeight/2);
            // 90度回転したBitmap画像を生成
            matrix.postScale(0.3f, 0.3f);// 0.5倍調整
            bitmap2 = Bitmap.createBitmap(bitmap, 0, 0,
                    imageWidth, imageHeight, matrix, true);
            imageView.setImageBitmap(bitmap2);
            break;
        case 180:
            matrix.setRotate(180, imageWidth/2, imageHeight/2);
            // 90度回転したBitmap画像を生成
            matrix.postScale(0.3f, 0.3f);// 0.5倍調整
            bitmap2 = Bitmap.createBitmap(bitmap, 0, 0,
                    imageWidth, imageHeight, matrix, true);
            imageView.setImageBitmap(bitmap2);
            break;
        case 270:
            matrix.setRotate(270, imageWidth/2, imageHeight/2);
            // 90度回転したBitmap画像を生成
            matrix.postScale(0.3f, 0.3f);// 0.5倍調整
            bitmap2 = Bitmap.createBitmap(bitmap, 0, 0,
                    imageWidth, imageHeight, matrix, true);
            imageView.setImageBitmap(bitmap2);
            break;
            default:
                matrix.postScale(0.3f, 0.3f);// 0.5倍調整
                bitmap2 = Bitmap.createBitmap(bitmap, 0, 0,
                        imageWidth, imageHeight, matrix, true);
                imageView.setImageBitmap(bitmap2);
    }
}</pre>
}

三日間ExifInterfaceのお話をしましたがまだまだ作っているアプリにも改善の余地があるのでまた画像周りを

いじることがあれば記事に載せるかもしれません。

あと前にも書きましたが、androidStudioのgradleや実機のスペックが人によって違ってくるのでここで紹介した

設定に合わせる必要は全くないのでそこは皆さんの環境に合わせてください。
 

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG