2013-05-14 15 views
5

私のアプリケーションでは、イメージを表示するpictureBoxがあります。ユーザーがpictureBoxを右クリックしてコンテキストメニューからCopyを選択すると、画像をクリップボードにコピーして、フォルダやその他の場所に貼り付けることができます。どうやってやるの?ユーザーがピクチャボックスからイメージをコピーしてどこにでも保存できるようにする

編集:私はこのコードを使用しますが、このユーザーのみが画像を単語に貼り付けることができます。

var img = Image.FromFile(pnlContent_Picture_PictureBox.ImageLocation); 
Clipboard.SetImage(img); 
+0

これまでに何を試しましたか?いくつかのコードを追加して、あなたがすでに行ったことを見て、残りの部分を手伝ってください。 – Mehran

+0

私はこのコードを使用しますが、このユーザーだけが単語に画像を貼り付けることができます。 'var img = Image.FromFile(pnlContent_Picture_PictureBox.ImageLocation); Clipboard.SetImage(img); ' –

+0

画像ボックスにファイルからの画像、メモリからの画像、または' Paint() 'イベントでレンダリングされていますか? – ja72

答えて

4

Clipboard.SetImageは、画像パス(バイナリデータ)をファイルパスではなくクリップボードにコピーします。 Windowsエクスプローラにファイルを貼り付けるには、クリップボードにそのファイルの内容ではなくファイルパスのコレクションが必要です。

StringCollectionに画像ファイルのパスを追加し、SetFileDropListの方法をClipboardと呼ぶだけで、目的が達成されます。

System.Collections.Specialized.StringCollection FileCollection = new System.Collections.Specialized.StringCollection(); 
FileCollection.Add(pnlContent_Picture_PictureBox.ImageLocation); 
Clipboard.SetFileDropList(FileCollection); 

これで、ユーザーはファイルをどこにでも通すことができます。 Windowsエクスプローラ。 Clipboard.SetFileDropList Methodhttp://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.setfiledroplist.aspx

+1

は完全に機能しますが、このメソッドで何が問題になっていますか? 'Clipboard.SetImage(pictureBox1.Image);' – Mehran

+1

'Clipboard.SetImage'はファイルパスではなくクリップボードにイメージの内容(バイナリデータ)をコピーします。ウィンドウ内のファイルを通過するには、そのコンテンツではなくクリップボードにファイルパスが必要です。 –

+0

ああ今、私はそれを得る、感謝Arash – Mehran

3

この上

詳細情報は、ピクチャボックスには、ファイルの画像が表示されない解決策ですが、それは、GDI +で時にレンダリングされます。

public partial class Form1 : Form 
{ 
    private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     // call render function 
     RenderGraphics(e.Graphics, pictureBox1.ClientRectangle); 
    } 

    private void pictureBox1_Resize(object sender, EventArgs e) 
    { 
     // refresh drawing on resize 
     pictureBox1.Refresh(); 
    } 

    private void copyToClipboardToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     // create a memory image with the size taken from the picturebox dimensions 
     RectangleF client=new RectangleF(
      0, 0, pictureBox1.Width, pictureBox1.Height); 
     Image img=new Bitmap((int)client.Width, (int)client.Height); 
     // create a graphics target from image and draw on the image 
     Graphics g=Graphics.FromImage(img); 
     RenderGraphics(g, client); 
     // copy image to clipboard. 
     Clipboard.SetImage(img); 
    } 

    private void RenderGraphics(Graphics g, RectangleF client) 
    { 
     g.SmoothingMode=SmoothingMode.AntiAlias; 
     // draw code goes here 
    } 
} 
関連する問題