2010年4月6日火曜日

Android Bitmap Tips - jpg, png 作成とか -

Bitmap.Config の値
ALPHA_8  :Alpha のみ
ARGB_4444 :128
ARGB_8888 :256
RGB_565  :Alphaなし Bitmap.hasAlpha() は常に false になる

今気づいたけど、Bitmap って Parcelable だったんだ。


Bitmap を単一色で塗りつぶす

Resource から BitmapFactory.decodeResource(getResources(), R.id.bitmap1)
とかで作った Bitmap は immutable = 不変 なので、
eraseColor() とかするには、mutable な Bitmap をコピーして
作成しないといけない。

つまり、これはエラー(IllegalStateException)になる

Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.id.bitmap1);
bm1.eraseColor(Color.BLACK);


こっちは、エラーにならない

Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.id.bitmap1);
Bitmap bm2 = bm1.copy(bm1.getConfig(), true);
bm2.eraseColor(Color.BLACK);




Bitmap から .png .jpg ファイルを作成する

boolean Bimap.compress (Bitmap.CompressFormat format, int quality, OutputStream stream)
を使います。

format には、
Bitmap.CompressFormat.JPEG
or
Bitmap.CompressFormat.PNG
を指定し、

quality には 0 ~ 100 を指定します。普通は100?

stream には、圧縮したビットストリームを流し込む先
を指定します。

成功すると true が返ってきます。
あとは、stream を hogehoge.png とか hogehoge.jpg で
保存すればOK



Alpha値だけの Bitmap にする

Alpha値だけ抜き出した Bitmap を作成するには
Bitmap.extractAlpha()
を使います。

* Xperia ではこのメソッドは使えませんでした。
 代わりに
  Bitmap.copy(Bitmap.Config.ALPHA_8, true)
 で Alpha値だけ抜き出した Bitmap が作れます



Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.id.bitmap1);
Bitmap bm2 = mb1.extractAlpha();



特定のXY座標の色を取得する

ある、XY座標の Color を取得するには
int Bitmap.getPixel (int x, int y)
を使います。

x の範囲は 0 ~ width - 1
y の範囲は 0 ~ height - 1

戻り値は argb Color です。

x, y が Bitmap の境界より大きい場合は
IllegalArgumentException が返ってきます。

0 件のコメント:

コメントを投稿