DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コントロールのイメージを直接ファイルへ保存したい。

環境/言語:[XP, VB.NET Framework 1.1]
分類:[.NET]

コントロールを配置したフォームを表示せずに、
コントロールのイメージを直接ファイルへ保存する方法を探しています。

Graphicsクラスには、オブジェクトをディスプレイデバイスに描画するための
メソッドが用意されているとの記載がリファレンスにありました。

コントロールのGraphicsオブジェクトから、イメージの作成が出来れば
実現出来るのではないかと考えているのですが、方法が見つかりません。
(上記の事が可能かどうかもわかりません。)

ご存じの方がいらっしゃいましたらアドバイスをお願いします。
■No27087に返信(たあかさんの記事)
> 環境/言語:[XP, VB.NET Framework 1.1]
VB.NET 2003 だと、使える機能もある程度限られてしまいますね。


> Graphicsクラスには、オブジェクトをディスプレイデバイスに描画するための
> メソッドが用意されているとの記載がリファレンスにありました。
はい。Graphics クラスを使ってディスプレイデバイスに描画することもできます。
そもそも Graphics は、基本的には描画先に依存していません。

たとえば、ディスプレイ(デスクトップ)に対して描画する場合には、
Graphics.FromHdc メソッドで得た Graphics を用いることができますし、
画像ファイルが相手なら、Graphics.FromImage メソッドを使って
Graphics を得れば OK です。あるいはプリンターに出力したいのであれば、
PrintDocument クラスの PrintPage イベントで得られる Graphics を使えば
良いですし、Form に対して描画するのであれば、Paint イベントで得られる
Graphics を使えば良い事になります。


> コントロールのGraphicsオブジェクトから、イメージの作成が出来れば
> 実現出来るのではないかと考えているのですが、方法が見つかりません。
Graphics クラスには、DrawLine、FillRectangle、DrawString、DrawImage 等の
メソッドがありますが、これはいわば、絵筆・色鉛筆・スクリーントーンなどの
「描画ツール」に相当するものです。Graphics クラス自体は、描画結果
(画用紙やキャンパスなどに相当)を表しているわけではありません。


先述したように、描画先のキャンパスには画像ファイル、画面、プリンター等々
いろいろな種類の物がありますが、最終目的が画像ファイルなのであれば、
Bitmap クラスを用意しておき、そこに Graphics で描画すれば良いでしょう。

 Dim bmp As New Bitmap(幅, 高さ)
 Dim g As Graphics = Graphics.FromImage(bmp)
  : '←ここに描画処理を記述
 g.Dispose()
 bmp.Save(保存先)

あとは、その描画処理をどのように実装するか、という話になりますね。


> コントロールを配置したフォームを表示せずに、
> コントロールのイメージを直接ファイルへ保存する方法を探しています。
質問の意図を読み取りきれているかどうか分かりませんが、
フォームすら表示しないということは、画面イメージの撮影(キャプチャー)を
行いたいという事ではなく、そもそも実際にコントロールを用意することなく
画像ファイルにしたいという意味なのでしょうか。

であれば、ControlPaint クラス等を利用できるかもしれません。
http://dobon.net/vb/dotnet/graphics/drawcontrols.html

一方、画面キャプチャーが目的なのであれば、API に頼る事になるでしょう。
■No27088に返信(魔界の仮面弁士さんの記事)

>>コントロールのGraphicsオブジェクトから、イメージの作成が出来れば
>>実現出来るのではないかと考えているのですが、方法が見つかりません。
> Graphics クラスには、DrawLine、FillRectangle、DrawString、DrawImage 等の
> メソッドがありますが、これはいわば、絵筆・色鉛筆・スクリーントーンなどの
> 「描画ツール」に相当するものです。Graphics クラス自体は、描画結果
> (画用紙やキャンパスなどに相当)を表しているわけではありません。

Graphicsクラスがボタン自体を描画するものだと勘違いしていました。
(そうであればそれをファイルへ出力すれば良いのかと。。)
描画先へ線や文字を描画するツールと考えます。

>>コントロールを配置したフォームを表示せずに、
>>コントロールのイメージを直接ファイルへ保存する方法を探しています。
> 質問の意図を読み取りきれているかどうか分かりませんが、
> フォームすら表示しないということは、画面イメージの撮影(キャプチャー)を
> 行いたいという事ではなく、そもそも実際にコントロールを用意することなく
> 画像ファイルにしたいという意味なのでしょうか。

はい。質問させていただいたことはキャプチャについてではありません。
実現したい事は、あるフォームのサムネイル画像の取得です。

サムネイルを取得したいフォームがディスプレイに表示されていない事が想定されるため、
内部でそのフォームが持つコントロールのインスタンスを生成、パネル等に配置し、
イメージを取得出来ないかと思い、上記の様な質問になってしまいました。

> であれば、ControlPaint クラス等を利用できるかもしれません。
> http://dobon.net/vb/dotnet/graphics/drawcontrols.html

ControlPaintクラスを利用してそっくりなコントロールを描画することで
対応してみます。

ありがとうございました。
解決済み!
■No27089に返信(たあかさんの記事)

Control.DrawToBitmapはどう?
■No27124に返信(nihihiさんの記事)
> Control.DrawToBitmapはどう?
このスレッドは .NET 1.1 での解決方法を求めたものです。
Control.DrawToBitmap メソッドは .NET 2.0 以降でのみ利用できます。

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.drawtobitmap(VS.80).aspx
(上部の赤文字、または下部のバージョン情報を確認してください)
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板