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

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

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

Re[4]: C# imageの配列は?


(過去ログ 92 を表示中)

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

■55234 / inTopicNo.1)  C# imageの配列は?
  
□投稿者/ wakaba (1回)-(2010/11/23(Tue) 05:15:59)

分類:[C#] 

private Image SourceImage1;
private Image SourceImage2;
      −中略−
 SourceImage1 = new Bitmap("c:\\Documents and Settings\\○○\\○○.bmp");
 SourceImage2 = new Bitmap("c:\\Documents and Settings\\○○\\○○.bmp");  
      −中略−
grap.DrawImage(SourceImage1, new Rectangle(SourcePosition, SourceImage1.Size), 0, 0, SourceImage.Width, SourceImage.Height, GraphicsUnit.Pixel, Attr);

SourceImageを複数個配置する予定なので、SourceImage[a]の様なaのインデックス管理させるにはどうしたら良いのでしょうか? 

まだまだ未熟すぎて、立ち往生しています。
ご教授を宜しくお願いします。

  
引用返信 編集キー/
■55236 / inTopicNo.2)  Re[1]: C# imageの配列は?
□投稿者/ Azulean (648回)-(2010/11/23(Tue) 10:02:30)
No55234 (wakaba さん) に返信
> SourceImageを複数個配置する予定なので、SourceImage[a]の様なaのインデックス管理させるにはどうしたら良いのでしょうか? 
ベタに書いて良いなら、以下のような感じでも。

(1)固定長配列
private Image[] SourceImages;

SourceImages = new Image[2];
SourceImages[0] = new Bitmap("c:\\Documents and Settings\\○○\\○○.bmp");
SourceImages[1] = new Bitmap("c:\\Documents and Settings\\○○\\○○.bmp");  
−中略−
grap.DrawImage(SourceImages[0], new Rectangle(SourcePosition, SourceImage1.Size), 0, 0, SourceImage.Width, SourceImage.Height, GraphicsUnit.Pixel, Attr);

(2)可変長リスト
private List<Image> SourceImages;

SourceImages = new List<Image>();
SourceImages.Add(new Bitmap("c:\\Documents and Settings\\○○\\○○.bmp"));
SourceImages.Add(new Bitmap("c:\\Documents and Settings\\○○\\○○.bmp"));
−中略−
grap.DrawImage(SourceImages[0], new Rectangle(SourcePosition, SourceImage1.Size), 0, 0, SourceImage.Width, SourceImage.Height, GraphicsUnit.Pixel, Attr);



気になる点としては、Bitmap を持ち続けて良いのかというところです。
Bitmap のインスタンスを持つ限り、メモリを占有し続けますし、その元となったファイルをロックし続けます。
引用返信 編集キー/
■55244 / inTopicNo.3)  Re[2]: C# imageの配列は?
□投稿者/ wakaba (2回)-(2010/11/23(Tue) 12:00:49)
Azulean さん。 ご教授ありがとうございます。

さっそく、可変長で組み替えてみました。

>
> 気になる点としては、Bitmap を持ち続けて良いのかというところです。
> Bitmap のインスタンスを持つ限り、メモリを占有し続けますし、その元となったファイルをロックし続けます。


ファイルをロックし続けるのは逆に都合が良いのですが、メモリも占有(考えてみれば確かにそうですね。)はつらいので、FromStream メソッドに変更してみようかと思います。

ご丁寧なアドバイスをありがとうございました。
解決済み
引用返信 編集キー/
■55245 / inTopicNo.4)  Re[3]: C# imageの配列は?
□投稿者/ よねKEN (634回)-(2010/11/23(Tue) 12:09:39)
No55244 (wakaba さん) に返信
> ファイルをロックし続けるのは逆に都合が良いのですが、メモリも占有(考えてみれば確かにそうですね。)はつらいので、FromStream メソッドに変更してみようかと思います。

Image.FromStreamメソッドをおっしゃっているなら、ファイルのロックは回避できますが、
今の実装方法のままではメモリを占有しつづけるのは変わりませんよ。

メモリを占有したくないなら、保持しておくのは画像ファイルのパスのリストにしておいて、
必要になるたびにその画像分のBitmapインスタンスを作成し、不要になったらBitmap.Disposeした上で、
即、参照を解放するようにすればよいでしょう。

解決済み
引用返信 編集キー/
■55246 / inTopicNo.5)  Re[4]: C# imageの配列は?
□投稿者/ wakaba (3回)-(2010/11/23(Tue) 12:23:15)
よねKEN さん。 ご教授ありがとうございます。

> Image.FromStreamメソッドをおっしゃっているなら、ファイルのロックは回避できますが、
> 今の実装方法のままではメモリを占有しつづけるのは変わりませんよ。
>

たしかに、Image.FromStreamメソッドをイメージしていました。(汗;)

> メモリを占有したくないなら、保持しておくのは画像ファイルのパスのリストにしておいて、
> 必要になるたびにその画像分のBitmapインスタンスを作成し、不要になったらBitmap.Disposeした上で、
> 即、参照を解放するようにすればよいでしょう。
>

危うく、先走ってしまうところでした。
手順までアドバイス下さいまして、ご親切にありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -