BrokenCamera を修正して簡単にいろんな壊れ方を試せるようにした

画像を壊すアルゴリズムの部分だけ別ファイルに分けて、ファイルを追加すれば自動でオプションメニューに表示されるように修正した。

追加方法

Breaker クラスを継承した自分のクラスを記述する (以下はこれJava で実装したもの)。

  • src/cc/omora/android/brokencamera/breakers/SwapHeightAndWidth.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 パッケージ配下のクラス一覧を取得している)。

http://farm6.static.flickr.com/5296/5444422016_dff9173153.jpg

ビットマップのデータをいじりたい場合はこんな感じで書く。

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 してください。