C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: PictureBoxの透過について


(過去ログ 72 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■42124 / inTopicNo.1)  PictureBoxの透過について
  
□投稿者/ Toshi (1回)-(2009/10/08(Thu) 11:45:39)

分類:[C#] 

C#でPictureBoxの画像透過について教えてください。
[コード]
private void Form1_Shown(object sender, EventArgs e) {
string url = Application.StartupPath + "\\LED.gif";
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url);
Bitmap bitmap = new Bitmap(stream);
stream.Close();
// 画像の背景を透明にする
bitmap.MakeTransparent();

for (int i = 0; i < 20; i++) {
PictureBox PictureBox_color = new PictureBox();
PictureBox_color.Image = bitmap;
PictureBox_color.Size = new Size(90, 80);
PictureBox_color.Location = new Point(15 + (i * 110), 15);
PictureBox_color.BackColor = Color.White;
PictureBox_color.Name = "PictureBox_color" + i.ToString();
this.Controls.Add(PictureBox_color);
}
}

上記コードでデバッグすると、問題なく動作するのですが、
指定した色を透過したくて
bitmap.MakeTransparent();

bitmap.MakeTransparent(Color.White);
とすると、メモリが不足しています。と例外が発生してしまいます。
このメモリ不足とはどういうことなのでしょうか?
また、回避方法があれば教えて下さい。
よろしくお願いいたします。

環境:VS2008+WinXP
引用返信 編集キー/
■42154 / inTopicNo.2)  Re[1]: PictureBoxの透過について
□投稿者/ 北 (23回)-(2009/10/08(Thu) 17:55:02)
2009/10/08(Thu) 18:48:05 編集(投稿者)

No42124 (Toshi さん) に返信
> C#でPictureBoxの画像透過について教えてください。
> [コード]
> private void Form1_Shown(object sender, EventArgs e) {
> string url = Application.StartupPath + "\\LED.gif";
> WebClient wc = new WebClient();
> Stream stream = wc.OpenRead(url);
> Bitmap bitmap = new Bitmap(stream);
> stream.Close();
> // 画像の背景を透明にする
> bitmap.MakeTransparent();
>
> for (int i = 0; i < 20; i++) {
> PictureBox PictureBox_color = new PictureBox();
> PictureBox_color.Image = bitmap;
> PictureBox_color.Size = new Size(90, 80);
> PictureBox_color.Location = new Point(15 + (i * 110), 15);
> PictureBox_color.BackColor = Color.White;
> PictureBox_color.Name = "PictureBox_color" + i.ToString();
> this.Controls.Add(PictureBox_color);
> }
> }
>
> 上記コードでデバッグすると、問題なく動作するのですが、
> 指定した色を透過したくて
> bitmap.MakeTransparent();
> を
> bitmap.MakeTransparent(Color.White);
> とすると、メモリが不足しています。と例外が発生してしまいます。
> このメモリ不足とはどういうことなのでしょうか?

私も同じコードで試してみましたが、メモリ不足とでますね。
なぜなのでしょうね。
画像サイズの問題かと思いましたが違うみたいですね。

引用返信 編集キー/
■42160 / inTopicNo.3)  Re[2]: PictureBoxの透過について
□投稿者/ Hongliang (476回)-(2009/10/08(Thu) 19:30:23)
System.Drawing では、OutOfMemoryException は関係ないはずのところで出ることが結構あるので当てになりません。

画像のソースにする Stream は Close すべきではありません。
かといってネットワーク上のリソースを扱う Stream などは開きっぱなしにするのも好ましくないので、Stream の内容を一旦 MemoryStream にコピーし、この MemoryStream を使って Bitmap を生成することをお勧めします。
引用返信 編集キー/
■42189 / inTopicNo.4)  Re[3]: PictureBoxの透過について
□投稿者/ 北 (24回)-(2009/10/09(Fri) 13:44:50)
No42160 (Hongliang さん) に返信
> System.Drawing では、OutOfMemoryException は関係ないはずのところで出ることが結構あるので当てになりません。
>
> 画像のソースにする Stream は Close すべきではありません。
> かといってネットワーク上のリソースを扱う Stream などは開きっぱなしにするのも好ましくないので、Stream の内容を一旦 MemoryStream にコピーし、この MemoryStream を使って Bitmap を生成することをお勧めします。

ありがとうございます。
勉強になりました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -