refirio.org
気ままな雑記帳&実験場。好き勝手に色々やっています。
エントリー
タグ「Android」の検索結果は以下のとおりです。
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();
}
}
AndroidでHTTP通信
2年くらい前にAndroidをさわったときは org.apache.http
でHTTPリクエストしていたけど、今は使えなくなっているらしい。
どうやら、OkHttpというのを使うのがイマドキらしい。ので試してみた。
確かに org.apache.http
を使うよりも、超シンプルなコードになるのでいい感じ。以前作った org.apache.http
を簡単に扱えるようにするクラスが用済みになってしまったけど、無事に通信できたので良しとする。
以下、上に書かれた内容と同じだけど自分の作業メモ。
compile 'com.squareup.okhttp:okhttp:2.5.0'
でライブラリを取り込んで、マニフェストファイルで
<uses-permission android:name="android.permission.INTERNET" />
を指定して、以下のコードで通信テスト。リソースファイルは略。
package org.refirio.request;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class MainActivity extends Activity {
private TextView message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message = (TextView)this.findViewById(R.id.message);
// データ取得(GET)
Button button_get = (Button)this.findViewById(R.id.button_get);
button_get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String result = null;
// リクエストオブジェクトを作って
Request request = new Request.Builder()
.url("http://httpbin.org/headers")
.get()
.build();
// クライアントオブジェクトを作って
OkHttpClient client = new OkHttpClient();
// リクエストして結果を受け取って
try {
Response response = client.newCall(request).execute();
result = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
// 返す
return result;
}
@Override
protected void onPostExecute(String result) {
message.setText("Result: " + result);
}
}.execute();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
ページ移動
- 前のページ
- 次のページ
- ページ
- 1
ユーティリティ
カテゴリー
タグクラウド
- 33分探偵1
- AMBITIOUS JAPAN!1
- ARIA2
- Air2
- Android2
- BLACK CAT2
- C#1
- Chrome2
- FINAL FANTASY2
- Flash2
- GAE1
- JavaScript18
- Kindle1
- Mac2
- MySQL7
- PHP68
- PayPal1
- Perl3
- PostgreSQL2
- Python1
- Ruby1
- SQLite6
- Switch1
- TinyMCE4
- Windows Media Player1
- bot1
- fragile1
- freo53
- iPhone3
- iTunes1
- levis1
- mod_rewrite2
- node.js1
- sola1
- true tears1
- いつかのメリークリスマス1
- いつか帰るところ1
- けいおん!1
- ここにしか咲かない花3
- とある魔術の禁書目録1
- とらドラ!2
- ひぐらしのなく頃に2
- みなみけ1
- イラスト4
- ガンダム003
- クロノトリガー1
- ザナルカンドにて4
- テラ1
- ニコニコ動画8
- ハゲタカ2
- ピアノ36
- マクロスF3
- ユニットテスト1
- ルパン三世1
- ローズ・オブ・メイ4
- 初音ミク1
- 半分の月がのぼる空1
- 名探偵コナン1
- 戦場のメリークリスマス5
- 携帯10
- 攻殻機動隊1
- 桜2
- 機工魔術士1
- 決行~姫をさがして~1
- 涼宮ハルヒの憂鬱10
- 深愛2
- 灼眼のシャナ4
- 聖剣伝説2
- 蕾3
- 蟲師2
- 返信2
- 野球1
- 鋼の錬金術師1