Androidアプリ開発

画像データの回転と余白の透過

この記事は約8分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これから Androidのアプリ開発やJavaでの開発を始めたい方への案内は、
記事の最後で紹介します)

この記事のテーマ


画像データの回転と回転で発生する余白を透過させる

低価格ながら本格的な画像編集ソフト

ポイント

Viewの回転自体はsetRotationで実装できますが、画像データを回転する場合はすこし工夫が必要です。
今回は、画像データの回転と回転で発生する余白の透過の実装を紹介します。

画像データの回転処理

ImageViewを継承したクラスに画像データの回転処理メソッドとして実装します。
画像データを回転はMatrixを使用します。

public class RotateImageView extends AppCompatImageView {
    :
    private Bitmap base;
    public RotateImageView(Context context) {
        super(context);
    }
    public RotateImageView(Context context, AttributeSet attrs) {
        super(context, attrs, defStyleAttr);
        setScaleType(ScaleType.MATRIX);
        :
    }
    public void setImageBitmap(Bitmap bitmap) {
        base = bitmap;
        super.setImageBitmap(bitmap);
    }

    :
    public Bitmap rotateBitmap(float angle) {
        Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888);
        this.draw(new Canvas(bitmap));
        // 回転
        super.setImageBitmap(null);
        Matrix matrix = new Matrix();
        matrix.postRotate(angle, (float) (bitmap.getWidth() * Math.cos(angle)), (float) (bitmap.getHeight() * Math.sin(angle)));
        Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
        draw(new Canvas(bitmap2));
        // 元に戻す
        super.setImageBitmap(base);
        this.matrix.postTranslate(0, 0);
        invalidate();
        return bitmap2;
    }
}

回転した画像データをCanvasに展開し、回転した画像データのBitmapを取り出します。
回転で発生する余白を透過させるため、画像データの回転する前にnullをセットします。

画像データを回転してファイル出力

ImageViewを継承したクラスで画像ファイルの読み込み、画像データの回転、画像データをファイル出力します。

    :
    // 画像データの読み込み
    RotateImageView rotate = findViewById(R.id.rotate);
    try (FileInputStream fileinputStream= new FileInputStream(new File(context.getFilesDir(), "input.png"))) {
        Bitmap bitmap = BitmapFactory.decodeStream(fileinputStream);
        rotate.setImageBitmap(bitmap);
    } catch (Exception e) {
	    // エラー処理
		:
    }

    :
    // 画像データを45度回転
    Bitmap bitmap = rotate.rotateBitmap(45f);

    :
    // 画像データの出力
    try (FileOutputStream fileOutputStream = new FileOutputStream(new File(context.getFilesDir(), "output.png"))) {
         bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
    } catch (Exception e) {
	   // エラー処理
	   :
    }

回転で発生する余白を透過させる場合、ファイル形式はPNGにします。

今回は、ここまでです。

画像データの回転処理しているAndroidアプリです。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちらから、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Androidのアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
msakiをフォローする
スポンサーリンク

コメント欄

タイトルとURLをコピーしました