Bitmapの背景を透明にする方法

7,156 views
Skip to first unread message

ロウキル

unread,
Oct 11, 2010, 4:44:32 AM10/11/10
to 日本Androidの会
こんにちわ。
いつもお世話になっております。

Viewに手書きした画像を以下の方法で.pngに保存するという機能を実装しているのですが、
保存する場合にBitmapの背景を透明にする方法はありますでしょうか(背景が白色なので白を透明にするでもいいです)
または、読み込み時に透過する方法でもいいのですが、やり方がわからずに困っています。

お手数をお掛けして申し訳ありませんがよろしくお願い致します。

--------------------------------------------------------------------------------------------

public String saveToFile() {
// 保存先の決定
String status = Environment.getExternalStorageState();
File file;
if (!status.equals(Environment.MEDIA_MOUNTED)){
file = Environment.getDataDirectory();
}else{
file = new File("/data/data/" + this.getPackageName() + "/
file");
file.mkdirs();
}

String fname = "/data/data/" + this.getPackageName() + "/files/
input_bmp" + m_nBmpCount + ".png";

// 画像をファイルに書き込む
try {
FileOutputStream out = new FileOutputStream(fname);
mBitmap.compress(CompressFormat.PNG, 100, out);
out.flush(); out.close();
} catch(Exception e) {}

return fname;
}

mosaki4

unread,
Oct 19, 2010, 9:42:50 AM10/19/10
to android-g...@googlegroups.com
大崎といいます

こちらのサイトで紹介されている方法で背景が白色の実装はほぼできると思います

透明化をするには
bmpCanvas.drawColor(Color.WHITE);
の記述を
bmpCanvas.drawColor(Color.argb(0, 0, 0, 0));
に書き換えることでBitmapの背景を透明にできます
(保存時の画像形式はPNGで保存する)


2010年10月11日17:44 ロウキル <kkei...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


たろサ

unread,
Oct 21, 2010, 3:07:57 AM10/21/10
to android-g...@googlegroups.com
 こんにちは、たろサです。
 ちょうど、Bitmapの勉強をしていたところなので、返信したいと思います。

> 透明化をするには
> bmpCanvas.drawColor(Color.WHITE);
> の記述を
> bmpCanvas.drawColor(Color.argb(0, 0, 0, 0));
> に書き換えることでBitmapの背景を透明にできます
> (保存時の画像形式はPNGで保存する)

 これでも透明になると思いますが、下地を白にして絵を描きたいと思います。ところ
が、一度色を塗ってしまうと、色を透明にすることがなかなか大変でした。
bmpCanvas.drawColor(Color.WHITE);
した後、
bmpCanvas.drawColor(Color.argb(0, 0, 0, 0));
しても、透明にならなかったです。

 結局、私が用いた方法は、直接カラーコードを書き換える方法です。
int width = mBmp.getWidth();
int height = mBmp.getHeight();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if( mBmp.getPixel(x, y)==0xffffffff){ mBmp.setPixel(x, y, 0); }
}
}
 ただ、これだと処理がたいへん遅かったので、下記のようにしました。

int width = mBmp.getWidth();
int height = mBmp.getHeight();
int[] pixels = new int[width * height];
mBmp.getPixels(pixels, 0, width, 0, 0, width, height);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if( pixels[x + y * width]==0xffffffff){ pixels[x + y * width] = 0; }
}
}
mBmp.eraseColor(Color.argb(0, 0, 0, 0));
mBmp.setPixels(pixels, 0, width, 0, 0, width, height);

 こっちの方が処理が速かったです。

 ところで、ロウキルさんに質問ですが、Viewに書いたものをどうやってBitmapに持って
きているのでしょうか。このやり方が、私にはわからないのです。

 よろしくお願いします。


(2010/10/19 22:42), mosaki4 wrote:
> 大崎といいます
>
> こちらのサイトで紹介されている方法で背景が白色の実装はほぼできると思います
> http://www.hakkaku.net/articles/20090831-579
>
> 透明化をするには
> bmpCanvas.drawColor(Color.WHITE);
> の記述を
> bmpCanvas.drawColor(Color.argb(0, 0, 0, 0));
> に書き換えることでBitmapの背景を透明にできます
> (保存時の画像形式はPNGで保存する)
>
>

> 2010年10月11日17:44 ロウキル <kkei...@gmail.com <mailto:kkei...@gmail.com>>:
>
> こんにちわ。
> いつもお世話になっております。
>
> Viewに手書きした画像を以下の方法で.pngに保存するという機能を実装しているので
> すが、
> 保存する場合にBitmapの背景を透明にする方法はありますでしょうか(背景が白色な
> ので白を透明にするでもいいです)
> または、読み込み時に透過する方法でもいいのですが、やり方がわからずに困ってい

> <mailto:android-g...@googlegroups.com> にメールを送信してください。
> このグループから退会するには、android-group-
> japan+un...@googlegroups.com
> <mailto:android-group-japan%2Bunsu...@googlegroups.com> にメールを送信し
> てください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> らこのグループにアクセスしてください。


>
>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信
> してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこ
> のグループにアクセスしてください。


--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com

Reply all
Reply to author
Forward
0 new messages