Androidでモザイク画像を作ってみる

今日はAndroidでモザイク画像を作ってみます。
モザイク画像を作るためには
- Androidで画像のピクセルデータをいじる方法
- 画像のモザイク加工アルゴリズム
この2つが分かればできそうです。
Androidで画像のピクセルデータをいじる方法
Androidで画像を扱う場合は、android.graphics.Bitmapクラスを使います。
前回にも登場しましたが、カメラから画像を受け取る時に、カメラのコールバックにJpegPictureCallBack等を呼ぶようにして、
などとすれば、Bitmapデータが取得できます。
BitmapクラスはARGB(alpha, red, green, blue)の形式でデータを持っています。
ピクセルデータの取得は
設定するには
のようにすれば、横x、縦yピクセルの値をいじくり倒すことができます。
Colorクラスはargb値から0xff000000等へ変換してくれる便利クラスだと思ってください。
例えば、
のように、RGB値に分解して取得したり、設定したりできます。
あとは、これらを使ってピクセルデータを操作するわけですが、まだ1つ問題があります。
上述したBitmapFactoryから生成されたBitmapはimmutableなものらしく、setPixelを呼ぶとエラーになる作りになっている様子。
mutableなインスタンスはbitmap.copy(Bitmap.Config, boolean)でインスタンスをコピーしなければならないらしいです。
#ここはもっとよい方法があるかもしれません。
copyメソッドの第一引数に、Bitmap.Config.ARGB_8888とすると32ビットのARGBデータ(alpha, red, green, blueそれぞれ0~255)を指定でき、copyメソッドの第二引数に、trueを渡すとmutableなインスタンスをコピーしてくれるようになります。
また、カメラから取得した画像をそのまま使用すると、あっけなくOut Of Memoryで落ちてしまいます。
なので、取得前にリサイズしてその画像を使うことにします。
最終的に前準備も含めた操作メソッドの中身はこのようになります。


