エントリー

Android版GPUImageで画像加工

画像や動画にエフェクトをかけることができるライブラリである、GPUImageをAndroidから使ってみたのでメモ。

サンプル実行

NDK(Android Native Development Kit)のインストールが必要

GradleでNDKを自動インストールしてくれるプロジェクトもあるが、GPUImage for Android のサンプルはそうなっていない。Android Studio で

ファイル → 設定 → SDK Tools → NDK

にチェックを入れて適用すると、NDKがインストールされる。インストールされたら

C:\Users\ユーザ名\AndroidStudioProjects\GPUImage\local.properties

ndk.dir=C\:\\Users\\ユーザ名\\AppData\\Local\\Android\\Sdk\\ndk-bundle

のパスが正しいことを確認する。

さらに

C:\Users\ユーザ名\AndroidStudioProjects\GPUImage\library\build.gradle

の12行目を編集。(gitからバージョンコードを取得している?ようだが、取れずにエラーになるので適当な数値を設定)

versionCode "git rev-list origin/master --count".execute().text.toInteger()
↓
versionCode 1

まだ謎エラーが出るようなら、

ビルド → Clean Project
ビルド → Rebuild Project

を試す。問題がなくなると追加ライブラリのインストールを求められたのでインストール。その後実行すると、サンプルを実機にインストールできた。

プロジェクトに組み込み

C:\Users\ユーザ名\AndroidStudioProjects\プロジェクト名\app\build.gradle

のdependenciesに以下を追加

//GPUImage
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'

これだけでプロジェクトにGPUImageが組み込まれるので、あとは呼び出すだけ。以下Intentから画像を選択して、その結果にフィルタをかけて表示するサンプルの抜粋。

// Intentを取得
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_GALLERY);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_GALLERY && resultCode == RESULT_OK) try {
        InputStream in = getContentResolver().openInputStream(data.getData());
        Bitmap img = BitmapFactory.decodeStream(in);
        in.close();

        // GPUImageで画像を加工
        GPUImage mGPUImage = new GPUImage(this);
        mGPUImage.setFilter(new GPUImageSobelEdgeDetection());
        mGPUImage.setImage(img);
        img = mGPUImage.getBitmapWithFilterApplied();

        // 画像を表示
        imageViewer.setImageBitmap(img);

        Toast.makeText(MainActivity.this, "画像を選択しました", Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed