gpt4 book ai didi

c# - 从桌面拖动图像并将其保存为位图

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:56 28 4
gpt4 key购买 nike

我的问题如下:我有一个名为 secretImage 的位图。现在,用户可以将图像从他们的桌面拖到面板上,图像存储在位图中。

这是我到目前为止尝试过的:

bitmap secretImage;

private void pnlImage_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Bitmap))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}

}

private void pnlImage_DragDrop(object sender, DragEventArgs e)
{
secretImage = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
pnlImage.BackgroundImage = secretImage;
}

问题是连效果都没有显示出来。因此我猜图像(*.bmp)在某种程度上不是 DataFormats.Bitmap。也许我的方法完全错误,我更像是 c# 的初学者。

感谢您的任何回答。

最佳答案

我想你真正需要的是:

    private delegate void DragDropDelegate(String[] s);

private void pnlImage_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}

private void pnlImage_DragDrop(object sender, DragEventArgs e)
{
try
{
String[] a = (String[])e.Data.GetData(DataFormats.FileDrop);

if (a != null)
{
this.BeginInvoke(new DragDropDelegate(DelegateDragDrop), new Object[] { a });
this.Activate(); // This avoids some odd behaviour
}
}
catch (Exception ex)
{
Trace.WriteLine("Error in DragDrop function: " + ex.Message);
}
}

private void DelegateDragDrop(String[] files)
{
// Verify file formats and do something with the files.

}

由于并非所有图像都是位图,因此它不会始终与 DataFormats.Bitmap 一起工作,所以最好换一种方式使用 FileDrop,因为它包含所有拖动文件,更具体地说是事件中的文件路径。

调用委托(delegate)是为了防止在处理文件时阻塞资源管理器,同时也避免了跨线程问题。

关于c# - 从桌面拖动图像并将其保存为位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17025716/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com