DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

クリップボードの画像を表示する、クリップボードに画像をコピーする

クリップボードの画像を表示する

Clipboard.GetImageメソッドを使用した方法

クリップボードにあるイメージデータは、Clipboard.GetImageメソッドで取得できます。このメソッドは、.NET Framework 2.0以降で使用できます。

次のコードは、クリップボード内の画像をピクチャボックス"PictureBox1"に表示する例です。ここでは「PictureBoxコントロールに簡単に画像を表示する」方法で画像を表示しています。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'Imports System.Windows.Forms

'クリップボードにBitmapデータがあるか調べる(調べなくても良い)
If Clipboard.ContainsImage() Then
    'クリップボードにあるデータの取得
    Dim img As Image = Clipboard.GetImage()
    If img IsNot Nothing Then
        'データが取得できたときは表示する
        PictureBox1.Image = img
    End If
End If
C#
コードを隠すコードを選択
//using System.Drawing;
//using System.Windows.Forms;

//クリップボードにBitmapデータがあるか調べる(調べなくても良い)
if (Clipboard.ContainsImage())
{
    //クリップボードにあるデータの取得
    Image img = Clipboard.GetImage();
    if (img != null)
    {
        //データが取得できたときは表示する
        PictureBox1.Image = img;
    }
}
補足:VB.NETでは、My.Computer.Clipboard.GetImageメソッドを使っても同じことができます。

Clipboard.GetDataObjectメソッドを使用した方法

.NET Framework 1.1以前では、Clipboard.GetDataObjectメソッド、及びIDataObject.GetDataメソッドにより取得できます。

以下に例を示します。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'Imports System.Windows.Forms

'クリップボードにあるデータの取得
Dim d As IDataObject = Clipboard.GetDataObject()
'クリップボードにデータがあるか確認
If Not d Is Nothing Then
    'ビットマップデータ形式に関連付けられているデータを取得
    Dim img As Image = DirectCast(d.GetData(DataFormats.Bitmap), Image)
    If Not img Is Nothing Then
        'データが取得できたときは表示する
        PictureBox1.Image = img
    End If
End If
C#
コードを隠すコードを選択
//using System.Drawing;
//using System.Windows.Forms;

//クリップボードにあるデータの取得
IDataObject d = Clipboard.GetDataObject();
//クリップボードにデータがあるか確認
if (d != null)
{
    //ビットマップデータ形式に関連付けられているデータを取得
    Image img = (Image)d.GetData(DataFormats.Bitmap);
    if (img != null)
    {
        //データが取得できたときは表示する
        PictureBox1.Image = img;
    }
}

クリップボードに画像をコピーする

Clipboard.SetImageメソッドを使用した方法

Clipboard.SetImageメソッドを使えば、簡単に画像をクリップボードへコピーできます。このメソッドは、.NET Framework 2.0以降で使用できます。

下の例では、画像ファイルを読み込み、そのデータをクリップボードにコピーしています。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'Imports System.Windows.Forms

'画像を作成する
Dim bmp As New Bitmap("C:\test.bmp")

'画像データをクリップボードにコピーする
Clipboard.SetImage(bmp)

'後片付け
bmp.Dispose()
C#
コードを隠すコードを選択
//using System.Drawing;
//using System.Windows.Forms;

//画像を作成する
Bitmap bmp = new Bitmap("C:\\test.bmp");

//画像データをクリップボードにコピーする
Clipboard.SetImage(bmp);

//後片付け
bmp.Dispose();

ただしこの方法では、アプリケーションが終了してもクリップボードからデータは削除されません。削除されるようにする方法は、次をご覧下さい。

補足:VB.NETでは、My.Computer.Clipboard.SetImageメソッドを使っても同じことができます。

Clipboard.SetDataObjectメソッドを使用した方法

.NET Framework 1.1以前では、Clipboard.SetDataObjectメソッドを使って画像をクリップボードへコピーできます。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'Imports System.Windows.Forms

'画像を作成する
Dim bmp As New Bitmap("C:\test.bmp")

'画像データをクリップボードにコピーする
Clipboard.SetDataObject(bmp, True)

'後片付け
bmp.Dispose()
C#
コードを隠すコードを選択
//using System.Drawing;
//using System.Windows.Forms;

//画像を作成する
Bitmap bmp = new Bitmap("C:\\test.bmp");

//画像データをクリップボードにコピーする
Clipboard.SetDataObject(bmp, true);

//後片付け
bmp.Dispose();

上記の例では、SetDataObjectメソッドの2番目のパラメータにtrueを指定しましたので、アプリケーションが終了してもデータはクリップボードから削除されずに残ります。次の例のように、2番目のパラメータを指定せずに(あるいはfalseを指定して)、アプリケーションが終了したらデータがクリップボードから削除されるようにすることもできます。しかしこの場合は、コピーした画像データがDisposeメソッドで破棄されると、データを正しく取り出せなくなります。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'Imports System.Windows.Forms

'画像を作成する
Dim bmp As New Bitmap("C:\test.bmp")

'画像データをクリップボードにコピーする
Clipboard.SetDataObject(bmp)
C#
コードを隠すコードを選択
//using System.Drawing;
//using System.Windows.Forms;

//画像を作成する
Bitmap bmp = new Bitmap("C:\\test.bmp");

//画像データをクリップボードにコピーする
Clipboard.SetDataObject(bmp);

クリップボードをクリアする方法は、「クリップボードをクリアする」で説明しています。

  • 履歴:
  • 2007/2/18 .NET Framework 2.0に関する記述を追加。
  • 2010/3/29 「クリップボードに画像をコピーする」をここに移動。.NET Framework 1.1以前のコードで、クリップボードにデータがあるか確認するようにした。.NET Framework 2.0以降のコードで、クリップボードにBitmapデータがあるか確認するようにした。
  • 注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

    • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
    • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
    • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
    • .NET Tipsをご利用いただく際は、注意事項をお守りください。