2013-05-14 4 views
5

Nella mia applicazione ho un pictureBox che mostra un'immagine. Quando l'utente fa clic con il pulsante destro del mouse su pictureBox e seleziona Copy dal menu di scelta rapida, voglio copiare l'immagine negli appunti in modo che l'utente possa incollarla nelle cartelle e in qualsiasi altro punto. Come lo posso fare?Permetti all'utente di copiare l'immagine da picturebox e salvarla ovunque

MODIFICA: Uso questo codice ma solo da questo utente è possibile incollare l'immagine in una parola.

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

cosa hai provato fino ad ora? aggiungi del codice, vediamo cosa hai già fatto e ti aiuto attraverso il resto – Mehran

+0

io uso questo codice ma solo da questo utente posso incollare l'immagine in parola. 'var img = Image.FromFile (pnlContent_Picture_PictureBox.ImageLocation); Clipboard.SetImage (img); ' –

+0

La casella immagine contiene un'immagine da un file, un'immagine dalla memoria o è resa con l'evento' Paint() '? – ja72

risposta

4

Clipboard.SetImage copia il contenuto dell'immagine (dati binari) per la non Appunti il ​​percorso del file. Per incollare un file in Esplora risorse è necessario disporre della raccolta dei percorsi di file negli Appunti e non del loro contenuto.

È possibile aggiungere semplicemente il percorso di tale file immagine a StringCollection e quindi chiamare il metododi Clipboard per ottenere ciò che si desidera.

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

Ora l'utente può passare il file ovunque, ad es. Windows Explorer.

Maggiori informazioni Clipboard.SetFileDropList Methodhttp://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.setfiledroplist.aspx

+1

funziona completamente, ma cosa c'è di sbagliato con questo metodo: 'Clipboard.SetImage (pictureBox1.Image);' – Mehran

+1

'Clipboard.SetImage' copia il contenuto dell'immagine (dati binari) negli Appunti non il percorso del file. per passare un file in una finestra, è necessario esplorare i percorsi dei file negli appunti e non il loro contenuto. –

+0

oh ora capisco, grazie Arash – Mehran

3

Questa è la soluzione quando la casella immagine non viene visualizzata l'immagine di un file, ma si è reso al momento con 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 
    } 
}