ユーザーが画像を設定できるコントロールを開発しています。これをできるだけユーザーフレンドリーにしたいので、コピー&ペースト、ドラッグ&ドロップをサポートします。
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 コードは、この SO の質問wpf InteropBitmap to bitmapへの回答で参照されている Thomas Levesque のものです。
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 になるクリップボードを含むものを除きます。
トーマスのコードを避けて使用する場合:
BitmapSource myBS = Clipboard.GetImage();
ImgPerson.Source = myBS;
System.Windows.Interop.InteropBitmap を取得します。
これらの操作方法がわかりません。それらをbytearrayに入れ、WCFに渡して再構築してフォルダーに保存できるようにします。