BitmapにCanvasで描画したい

963 views
Skip to first unread message

kentarou mukunasi

unread,
Oct 5, 2010, 12:34:39 AM10/5/10
to android-g...@googlegroups.com
こんにちは

椋梨ともうします。

始めて投稿します。
現在Androidのアプリを作成しています。
Bitmapに文字や直線を描画してImageVewで表示使用としています。

以下のソースはエミュレータでは動作するのですが、実機では動作しません。
Canvas canvas = new Canvas(bmp); でVMが落ちているようです。
実機にて動かしたいので、なにかアドバイスがあればお願いします。

やりたいことはボタンの画像に数字を上書きしてテンキーを作りたいのです。
テンキーそれぞれは独立したImageViewにします。
キーが10個ならImageViewが10個あるという感じです。


----------
public class CanvasTest extends Activity {
private ImageView mImageView01;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mImageView01 = (ImageView) findViewById(R.id.ImageView01);
//bmp
Resources r = getResources();
Bitmap bmp = BitmapFactory.decodeResource(r, R.drawable.panel_alp_2);
Canvas canvas = new Canvas(bmp);//←実機ではここで落ちている

Paint p = new Paint( Paint.ANTI_ALIAS_FLAG);
p.setTextSize(36);
p.setColor( Color.RED);
canvas.drawLine(0,0,100,100, p);

mImageView01.setImageBitmap(bmp);
}
}
----------


以上、よろしくお願いします。

--
/// 椋梨 健太郎 ///

Highmount(K-Takayama)

unread,
Oct 5, 2010, 12:50:36 AM10/5/10
to android-g...@googlegroups.com
こんにちは。K-Takayama@福岡です。

ちょっと気になったのですが、敢えてビットマップで持たせる意味は何なんでしょう?
ためしにPNGフォーマットの画像で渡してもやはり落ちますか?


2010年10月5日13:34 kentarou mukunasi <mk.ana...@gmail.com>:

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

kentarou mukunasi

unread,
Oct 5, 2010, 1:00:45 AM10/5/10
to android-g...@googlegroups.com
K-Takayamaさん

こんにちは、返答ありがとうございます。
ビットマップというのは

>mImageView01.setImageBitmap(bmp);

で渡すためのbmpという意味でBitmapクラスを示しています。

画像ファイルは以下のようにPNGにしています。

/res/drawable-hdpi/panel_alp_2.png

yokmama

unread,
Oct 5, 2010, 1:13:32 AM10/5/10
to android-g...@googlegroups.com
夜子ままです

Canvasにはimmutable(変更不可)なBitmapを渡したらいけないので、
mutableな画像を作成して渡してあげればよいです。

Bitmap src = bmp.copy(Bitmap.Config.ARGB_8888, true);

こんなかんじで、、
Configは色々意見があるとおもいます、私もあまり詳しいほうじゃないので
よくわかっている方の後方支援を求む。


2010年10月5日13:34 kentarou mukunasi <mk.ana...@gmail.com>:
こんにちは

kentarou mukunasi

unread,
Oct 5, 2010, 3:28:16 AM10/5/10
to android-g...@googlegroups.com
夜子さん

こんにちは

椋梨です。

>Canvasにはimmutable(変更不可)なBitmapを渡したらいけないので、

をヒントに調べた結果copy()して使えばいいことがわかりました。
以下のように

Bitmap bmp2 = bmp1.copy(Bitmap.Config.ARGB_8888, true);

を入れるとうまくいきました。

ヒントありがとうございました。


----------


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mImageView01 = (ImageView) findViewById(R.id.ImageView01);
//bmp
Resources r = getResources();

Bitmap bmp1 = BitmapFactory.decodeResource(r, R.drawable.panel_alp_2);
Bitmap bmp2 = bmp1.copy(Bitmap.Config.ARGB_8888, true);

Canvas canvas = new Canvas(bmp2);



Paint p = new Paint( Paint.ANTI_ALIAS_FLAG);
p.setTextSize(36);
p.setColor( Color.RED);
canvas.drawLine(0,0,100,100, p);

mImageView01.setImageBitmap(bmp2);
}
----------

Reply all
Reply to author
Forward
0 new messages