2010年12月9日木曜日

Bitmap.copyメソッドがPNGの色情報を欠落させる件

突然ですが、アプリをマーケットに登録しました。
Asimoc」という可逆モザイクアプリです。 厳密に言えばモザイクでは無いんですが、パスワードをかけてモザイクをかけれる。と、いうソフトで。

特段難しいことはしてないんですが、「そろそろリリースできそう!」って時に起きた現象が

「Xperiaだと、BitmapをARGB_8888のフォーマット指定してcopyしても、下位ビットの色情報を欠損してくれる」
です。

いや、いろいろ調べていったら、Xperiaが悪いんじゃなくて、AndroidOS2.1ぐらいからのバグ? だか、仕様?だか。

今までは、BMPにピクセル単位で読み込んだり、書き込んだりするために、一回コピーをして、編集可能BMPを取得していたわけです。

Bitmap tempBmp = bitmap.copy(Config.ARGB_8888, true);

 これで、OS1.6までは行けたんだけど、なんかOS2.1からこれだとダメで。

しょうがないので


Bitmap tempBmp = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Config.ARGB_8888);
Canvas canvas = new Canvas(tempBmp);
canvas.drawBitmap(bitmap,0,0,null);

と、言う感じに、先に空でBitmapを作って、そこに描画。 と。

なんでこんな事をしなきゃいけなくなったのか・・・。

ううむーん。

0 件のコメント:

コメントを投稿