我正在开发一个控件,用户可以在其中设置图像,我希望它尽可能地对用户友好-因此支持复制和粘贴、拖放。
我已经让这部分工作使用 IDataObjects,测试 FileDrop、FileContents(例如来自 Outlook)和位图的文件格式,例如:
private void GetImageFromIDataObject(IDataObject myIDO)
{
string[] dataformats = myIDO.GetFormats();
Boolean GotImage = false;
foreach (string df in dataformats)
{
if (df == DataFormats.FileDrop)
{
// code here
}
if (df == DataFormats.Bitmap)
{
// Source of my problem here... this gets & displays image but
// how do I then convert from here ?
ImageSource myIS = Utilities.MyImaging.ImageFromClipboardDib();
ImgPerson.Source = myIS;
}
}
}
ImageFromClipboard 代码是 Thomas Levesque 的,在这个 SO 问题wpf InteropBitmap to bitmap的答案中引用
http://www.thomaslevesque.com/2009/02/05/wpf-paste-an-image-from-the-clipboard/
无论我如何将图像放到 ImgPerson 上,这部分工作正常;图像显示很好。
当用户按下保存时,我需要将图像转换为字节数组并发送到 WCF 服务器,该服务器将保存到服务器 - 例如,将字节数组重建为图像并将其保存在文件夹中。
对于所有格式的拖放,复制和粘贴图像是某种形式的 System.Windows.Media.Imaging.BitmapImage。
除了那些涉及剪贴板的使用 Thomas 的代码变成 System.Windows.Media.Imaging.BitmapFrameDecode。
如果我避免使用 Thomas 的代码并使用:
BitmapSource myBS = Clipboard.GetImage();
ImgPerson.Source = myBS;
我得到一个 System.Windows.Interop.InteropBitmap。
我不知道如何使用这些;将它们放入字节数组中,以便我可以传递给 WCF 进行重建并保存到文件夹。