我正在開發一個控件,用戶可以在其中設置圖像,我希望這可以儘可能地方便用戶 - 所以支持複製&粘貼,拖動&拖放。Image/ImageSource/Interop Image to bytearray
我有這部分使用IDataObjects工作,測試的FileDrop的fileformats,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代碼是托馬斯·萊維斯克在回答作爲參考這太問題wpf InteropBitmap to bitmap
http://www.thomaslevesque.com/2009/02/05/wpf-paste-an-image-from-the-clipboard/
無論我如何獲取圖像到ImgPerson,這部分工作正常;圖像很好地顯示。
當用戶按下保存時我需要將圖像轉換爲bytearray併發送到WCF服務器,該服務器將保存到服務器 - 如在重建字節數組到圖像並將其保存在文件夾中。
對於所有格式的拖動&拖放,複製&粘貼圖像是某種形式的System.Windows.Media.Imaging.BitmapImage。
除了那些涉及使用托馬斯代碼的剪貼板變成System.Windows.Media.Imaging.BitmapFrameDecode。
如果我避免托馬斯的代碼和使用:
BitmapSource myBS = Clipboard.GetImage();
ImgPerson.Source = myBS;
我得到一個System.Windows.Interop.InteropBitmap。
我不知道如何使用這些;讓他們進入一個bytearray,所以我可以傳遞給WCF重建和保存到文件夾。
我以前試過BitmapImage myBI = ImgDriver.Source作爲BitmapImage,這導致null;所以演員沒有工作。我不能在明天之前測試你的答案,但是我懷疑這兩個選項仍然會導致隱式演員無效? – andrew