WPFアプリケーションをドロップターゲットにして、任意のWebページからイメージをドラッグできるようにします。WebページからWPFウィンドウにドラッグされたイメージを受け取る
イメージがWebページからドラッグされると、明らかに「DragImageBits」形式になります。この形式は、デシリアライズしてShDragImageと入力できます。 (私が定義した方法についての質問の最後を参照してください)
これをWPFイメージに変換するにはどうすればよいですか?
これは私の現在の試みです。メッセージは、単にであると、私はタイプSystem.Runtime.InteropServices.ExternalException
の例外を取得します。この時点で
private void UserControl_Drop(object sender, System.Windows.DragEventArgs e)
{
string[] formats = data.GetFormats();
// DragImageBits
if (formats.Contains("DragImageBits"))
{
MemoryStream imageStream = data.GetData("DragImageBits") as MemoryStream;
// Now I'm deserializing this, the only way I know how
imageStream.Seek(0, SeekOrigin.Begin);
BinaryReader br = new BinaryReader(imageStream);
ShDragImage shDragImage;
shDragImage.sizeDragImage.cx = br.ReadInt32();
shDragImage.sizeDragImage.cy = br.ReadInt32();
shDragImage.ptOffset.x = br.ReadInt32();
shDragImage.ptOffset.y = br.ReadInt32();
shDragImage.hbmpDragImage = new IntPtr(br.ReadInt32());
shDragImage.crColorKey = br.ReadInt32();
var systemDrawingBitmap = System.Drawing.Bitmap.FromHbitmap(shDragImage.hbmpDragImage);
(誰でもdesirializationを行うための正しい方法を知っている場合、私はすべての耳です)。
私は何をすべきか知っていますか?
次に、サポートするクラスの定義を示します。 this blog entryからコピーしました。
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct Win32Point
{
public int x;
public int y;
}
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct Win32Size
{
public int cx;
public int cy;
}
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct ShDragImage
{
public Win32Size sizeDragImage;
public Win32Point ptOffset;
public IntPtr hbmpDragImage;
public int crColorKey;
}
私がいます同じ問題 - 私は、FirefoxとIE9の両方でDevice Independent Bitmap(DIB)フォーマットも提供することを発見しました。これが利用可能な場合、WebClientを使用してファイルをダウンロードする必要はありません。これは、わかりやすい(ビットマップ)形式でファイルにアクセスできるためです。 Firefoxでも 'FileDrop'形式が公開されていますが、htmlを解析してfiledrop形式を使用すると、必ずしも画像ではないオブジェクトをダウンロードすることができます – funseiki
これは私を大きく助けます。投稿していただきありがとうございます。正規表現は多くの有効な画像リンクと一致しません。私は@ "] + src =" "([^" "] *)" ""が少し良く機能することを発見しました。 –
あなたは本当の命を救う人です。私のような他の人がGoogle画像から直接画像をドラッグしたい場合は、「データ」で始まる場合はUriStringをチェックします。これらの文字列には既にデータが含まれているので、[この質問](http ://stackoverflow.com/q/25748858/3410196)) –