BrokenCamera を修正して簡単にいろんな壊れ方を試せるようにした
画像を壊すアルゴリズムの部分だけ別ファイルに分けて、ファイルを追加すれば自動でオプションメニューに表示されるように修正した。
追加方法
Breaker クラスを継承した自分のクラスを記述する (以下はこれを Java で実装したもの)。
package cc.omora.android.brokencamera.breakers; import cc.omora.android.brokencamera.Breaker; public class SwapHeightAndWidth extends Breaker { public void breakData(byte[] data, int level) { for(int i = 0; i < data.length; i++) { if((data[i] & 0xFF) == 0xFF && ((data[i+1] & 0xFF) == 0xC0 || (data[i+1] & 0xFF) == 0xC2)) { byte[] bytes = {data[i+5], data[i+6], data[i+7], data[i+8]}; data[i+5] = bytes[2]; data[i+6] = bytes[3]; data[i+7] = bytes[0]; data[i+8] = bytes[1]; } } } }
上記のファイルを追加するだけで、自動的にメニューに表示されて選択可能になる (リフレクションで breakers パッケージ配下のクラス一覧を取得している)。
ビットマップのデータをいじりたい場合はこんな感じで書く。
package cc.omora.android.brokencamera.breakers; import cc.omora.android.brokencamera.Breaker; import android.graphics.Bitmap; public class SwapHeightAndWidth extends Breaker { public void breakData(Bitmap bitmap, int level) { // operate on bitmap data } }
その他
エンドユーザ的には次のバージョンから SwapHeightAndWidth が使えるようになる(はず)。あとおもしろいアルゴリズム知ってる人いたらぜひなんか追加して pull request してください。
参考
- アプリケーションパッケージ(.apk)中のクラスを列挙する - Kazzzの日記
- Twitter / @fuba: glitch camera、アルゴリズムじぶんで書けたらおもしろそう (iPhone の glitch camera への言及)