允许用户从图片盒复制图像并将其保存在任何地方
本文关键字:图像 保存 任何地 存在 复制 许用户 用户 | 更新日期: 2023-09-27 18:13:35
在我的应用程序中,我有一个显示图像的pictureBox
。当用户右键单击pictureBox
并从上下文菜单中选择Copy
时,我想将图像复制到剪贴板中,以便用户可以将其粘贴在文件夹和其他任何地方。我该怎么做呢?
编辑:我使用这段代码,但是这个用户只能将图像粘贴到word.
var img = Image.FromFile(pnlContent_Picture_PictureBox.ImageLocation);
Clipboard.SetImage(img);
Clipboard.SetImage
将图像内容(二进制数据)复制到剪贴板而不是文件路径。要在Windows资源管理器中粘贴文件,你需要在剪贴板中有文件路径集合,而不是它们的内容。
您可以简单地将该映像文件的路径添加到StringCollection
,然后调用Clipboard
的SetFileDropList
方法来实现您想要的。
System.Collections.Specialized.StringCollection FileCollection = new System.Collections.Specialized.StringCollection();
FileCollection.Add(pnlContent_Picture_PictureBox.ImageLocation);
Clipboard.SetFileDropList(FileCollection);
现在用户可以将文件传递到任何地方,例如Windows资源管理器。
Clipboard.SetFileDropList Method
的更多信息http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.setfiledroplist.aspx
这是当图片框不显示文件图像时的解决方案,但它被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
}
}