
C#のWinFormでWebBrowser(IE)を配置し、Webページの画像をDrag&DropでpictureBoxに表示させるようにしたいのですが行き詰まっております。
素の画像<img src="http://sample.com/image/image_001.jpg">をドラッグした場合、
C#
1private void pictureBox_DragEnter(object sender, DragEventArgs e) { 2 if (e.Data.GetDataPresent(DataFormats.FileDrop)) { 3 string src = e.Data.GetData(DataFormats.Text).ToString(); 4 Console.WriteLine(src); 5 } 6}
これで画像URLの"http://sample.com/image/image_001.jpg"を取得できます。
【問題】
しかしLink付きの画像をドラッグすると上記コードではLINKのURL(=href)が取得されてしまいます。
例えば
<a href="http://sample.com/page1.html"><img src="http://sample.com/image/image_001.jpg" alt="**リンク先AAA**"></a>
をドラッグした場合です。
そこで、FileGroupDescriptorをMemoryStreamで取得してみました。
しかしMemoryStreamにはLINKのaltテキスト(上記リンク先AAAの部分)しか入っていないようです。
C#
1MemoryStream ms = (MemoryStream)e.Data.GetData("FileGroupDescriptor"); 2ms.Seek(76, SeekOrigin.Begin); 3int len = 0; 4while (ms.ReadByte() > 0) {len++;} 5ms.Seek(76, SeekOrigin.Begin); 6ms.Read(bs, 0, len); 7ms.Close(); 8string text = Encoding.GetEncoding("Shift_JIS").GetString(bs); 9Console.WriteLine(text); 10// 「リンク先AAA」と出力される
以下も調べてみましたがMemoryStreamの中身をどうやって調べればよいかわからず結果的にわかりませんでした。
(MemoryStream)e.Data.GetData("FileGroupDescriptorW")
(MemoryStream)e.Data.GetData("UniformResourceLocator")
(MemoryStream)e.Data.GetData("UniformResourceLocatorW")
【他にやってみたこと】
他に、html全文字列からaltテキストを検索して<img>タグのsrcを探し出そうとしましたが、そもそもaltに同じ文字列があるページもあり、どの<img>タグか判定できませんでした。
どのようにすればWebBrowserから画像をドラッグしてこれるでしょうか?
何かアイデアなどがあればお教えください。
どうぞよろしくお願い致します。
開発環境:Windows10+VisualStudio 2015 C# .NetFramework4.5

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。