2013-05-14 12 views
5

Uygulamamda bir görüntü gösteren bir pictureBox var. Kullanıcı, pictureBox'u tıklatıp, içerik menüsünden Copy'u seçtiğinde, görüntüyü panoya kopyalamak istiyorum, böylece kullanıcı bunu klasörlere ve başka herhangi bir yere yapıştırabilir. Bunu nasıl yapabilirim?Kullanıcının görüntüyü görüntü kutusundan kopyalamasına ve her yere kaydetmesine izin ver

DÜZENLEME: Bu kodu kullanıyorum ancak bu kullanıcı tarafından yalnızca görüntüyü kelimeye yapıştırabilir.

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

Şimdiye kadar neler denediniz? Biraz kod ekleyin, zaten ne yaptığını görelim ve geri kalanında size yardımcı olalım – Mehran

+0

Bu kodu kullanıyorum ama bu kullanıcı tarafından sadece kelimeye resim yapıştırabilirsiniz. 'var img = Image.FromFile (pnlContent_Picture_PictureBox.ImageLocation); Clipboard.SetImage (img); –

+0

Resim kutusunda bir resim, bellekten bir görüntü veya 'Paint()' olayı ile oluşturulmuş bir görüntü var mı? – ja72

cevap

4

Clipboard.SetImage panoya kopyalar değil dosya yolu görüntü içeriğini (ikili veriler). Windows Gezgini'nde bir dosyayı yapıştırmak için, dosya yollarının koleksiyonunun içeriğinde değil panoda olması gerekir.

Bu görüntü dosyasının yolunu bir StringCollection numarasına ekleyebilir ve daha sonra istediğinizi elde etmek için Clipboard yöntemini kullanarak SetFileDropList yöntemini çağırabilirsiniz.

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

Şimdi, kullanıcı dosyayı herhangi bir yere yapıştırabilir örn. Windows Gezgini Clipboard.SetFileDropList Methodhttp://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.setfiledroplist.aspx

+1

tamamen çalışır, ancak bu yöntemde yanlış olan: 'Clipboard.SetImage (pictureBox1.Image);' – Mehran

+1

'Clipboard.SetImage', görüntü içeriğini (ikili veri) panoya dosya yoluna kopyalar. pencerede bir dosya geçmişini incelemek için, içeriğinde değil, panoda dosya yollarının olması gerekir. –

+0

oh şimdi anladım, teşekkürler Arash – Mehran

3

Bu üzerinde

diğer bilgiler Resmi kutusunu dosya görüntü vermiyorsa çözüm, ama GDI + ile üzerine oluşturulur.

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 
    } 
} 
İlgili konular