Androidアプリ開発 -画像を加工してセピア色にしてみる-

公開日: : Android, IT


 やりたいこと

ギャラリーから選んだ画像を加工してセピア色にしたい

 ソース

 画像を取得

前回の記事を参考にしつつ、画像を取得します。
当然ですが、今回はサムネイル化しません。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_GALLERY && resultCode == RESULT_OK) {
            try {
                InputStream in = getContentResolver().openInputStream(data.getData());
                originalImg = BitmapFactory.decodeStream(in);
                in.close();
                iv.setImageBitmap(originalImg); //選択した画像を表示
            } catch (Exception e) {
                Toast.makeText(this, "画像の取得に失敗しました。", Toast.LENGTH_LONG).show();
            }
        }
    }

 画像加工

今回は画像を選択後にボタンをクリックしたらセピアにしてみます。
ボタンをクリックしたら以下のメソッドを呼ぶようにします。

public void sepia(){
 int width = originalImg.getWidth();
 int height = originalImg.getHeight();
 int pixels[] = new int[width * height];
 originalImg.getPixels(pixels, 0, width, 0, 0, width, height); //(1)
 for(int i=0; i<pixels.length; i++){
  //(2)
  int red = (pixels[i] & 0x00FF0000) >> 16;
  int green = (pixels[i] & 0x0000FF00) >> 8;
  int blue = (pixels[i] & 0x000000FF);
  //(3)
  int gray = (77 * red + 150 * green + 29 * blue) >> 8;
  red = green = blue = Math.min(255, Math.round(gray));
  red *= 1;
  green = (int) Math.abs(green*0.9);
  blue = (int) Math.abs(blue*0.7);
  pixels[i] = Color.rgb(red, green, blue);
 }
 Bitmap mFilterBitmap = Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565);
 iv.setImageBitmap(mFilterBitmap);
}

(1)
getPixelsで、全ピクセルをpixels配列に取得しています。

(2)
pixelsには以下の形でデータが入っているので、それをそれぞれにわけます。

24~31ビットalpha
16~23ビットred
8~15ビットgreen
0~7ビットblue

(3)
セピアを作る式は、まずグレースケールに変換してから、さらにRGBそれぞれの値を少しいじっています。
これで作れるセピア色は、少し暗い感じがしますので数式をいじれば色々と違った感じになるかと思います。

(その他)
for文の中でgetPixcelやsetPixcelを使うという方法もありますが、これらは遅いので使っていません。

 まとめ

今回のケースだと、計算式も複雑じゃないので、まだJavaでも遅くありません。

しかし、もっと色々なことをやろうとするとJavaでは時間がかかりすぎてしまいます。
画像を色々と加工したい場合は、C言語でやるのが良いと思います。

 参考サイト

広告

関連記事

no image

iPhoneアプリ開発 -mixiSDKを使ってmixi連携をしてみる(2)-

* 前回 は、「ユーザーにAPI利用のための認可」をおこなってもらうところまでやりました。 本エン

記事を読む

Jenkins + スマホアプリ(1) -スマホアプリ用CI環境を作ってみよう-

前回までは、iPhoneアプリでのCI環境でした。 TestFlightがAndroidアプリにも

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(1) -最初の一歩-

* 作るアプリ 結婚式や2次会で「自分の名前を書く」芳名帳 これをアプリで作ってみます。

記事を読む

no image

jQuery Mobileでミスしたこと -JSだけ最新にしてしまってレイアウト崩れたの巻-

* 前提(CDN先) jQuery Mobileを使う場合、cssを自前のサーバにおいて、jsはC

記事を読む

iPhoneアプリ開発 -UIScrollViewでタッチを取得-

* やりたいこと UIScrollViewでタッチを取得する。 * 方法 通常のUIScrollV

記事を読む

setup

Google Appsで独自ドメインメールの利用

独自ドメインでメアドを持ちたかったのでGoogle Appsを利用してみました。 その各種設定の覚

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(5) -ペンサイズと入力エリア数の設定-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:titl

記事を読む

no image

Facebookがちょっとコワイ vol.2 -本当にあなたはあなたなの?-

以下のブログを読んで、さらにコワイと思ったFacebook。 あなたが登録している「友

記事を読む

no image

Androidアプリ開発 -リストをタッチして別ページ表示-

* 前提 -「設定画面」で各種項目を設定。 --Activity:ConfigActivity --

記事を読む

no image

iPhoneアプリ開発 −2本指で画像を移動させる−

* やりたいこと 表示させている画像(UIImageView)を2本指で移動させたい。 ※1本指は別

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑