二日前、難読化がよくわからないからexeでラップして公開してたけど、普通にexeからjar取り出せた^^;

具体的には、ラップ化にexewrapというのを使わせて頂いているのですが、
exe化した後、普通にリソースとして存在してました。

リソースではpack200という拡張子が「*.pack.gz」のような形で格納されているのですが、
普通にJava1.6のjreパッケージに含まれてる「unpack200.exe」っていうソフトで「*.jar」に戻せます。
「*.jar」はzip形式なので、そのままはい。classに。

それで、いい加減、難読化の方法を調べました。
結論としては、ProGuardっていうので簡単に出来た。

方法は普通にダウンロードしてきて、中の「./lib/proguardgui.jar」を実行するとGUIが表示される。
inputから難読化したい「*.jar」を選択。outputで出力先決めて、後は省略して「Process!」押せば完成。
ほんのちょっとだけ時間掛かるけど、すぐに出力先に難読化されたjarができてる。
しかも、自分の場合サイズがjarが難読化前に比べて半分近くになった。

あと、ヒープ確保の件なんだけど、exewrapで変換する時、
うまく引き数で与えれば最大ヒープ領域の容量を宣言した上で、自動的に起動できることが分かりました。
プログラムの上での最大ヒープ領域の指定のやり方は分からないけど、一応Windows環境ならこれでOK。
やり方は、こんな感じ、「exewrap.exe -g -e NOLOG -a “-Xmx256M”」みたいにVM引き数を追加すればOK。

画像処理の話題に変わるけど、
昨日は、単純減色と誤差拡散減色と組織的ディザ法減色を追加してみた。
組織的ディザ法ではipmpackでまたしてもバグ発見した。
というかアルゴリズム間違ってると思う。
1番目に近い色と2番目に近い色の2色を調べないといけないんだけど、
距離を基準にするんじゃなくて、Absを使ったのを基準にしないと綺麗にならないらしい。
それと、ディザリングパターンの中で、最大の数を最後に割ってたんだけど、本当は「最大の数+1」を最後に割らないといけない。
こうしないと、黒はうまく減色できるんだけど、白はぶつぶつと不必要な点が出てしまう。

あとはメディアンカット。
以前はアルゴリズムがうまくいかずに、結局32色までしか対応できなかったけど、今回はどうかな。
一応対応させたい。

それとレンズぼかし。
これRとGとBを別々に浮動少数で計算しないといけなくて、一度浮動少数に格納したいんだけど、
画像処理関係の精度ならfloatで十分だと思う。DirectXのHDRレンダリング技術だって内部はfloatで計算してるし。
ただ速度をとるならdouble。←後で分かったのですが、floatの方が速いです。


完成した画像処理のツールは、こちらから試すことが出来ます。