投稿者 通りすがり  (社会人) 投稿日時 2011/8/6 23:37:18
こんばんは。

質問ですが、lstFileに追加される文字列は
http://t1.gstatic.com/images?q=tbn:ANd9GcQdhaJCva2PkXBwUfnJK_zvu8LtNP0n3Y8e_ObbQ2t6VSM3Iq2gpg
ではなく、
data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCACMAIwDASIAAh・・・
という文字列ではありませんか?

IE9 VS2010 proではそうなります。


そうだという前提で話しますが、
まず
http://t1.gstatic.com/images?q=tbn:ANd9GcQdhaJCva2PkXBwUfnJK_zvu8LtNP0n3Y8e_ObbQ2t6VSM3Iq2gpg
は、グーグルの画像キャッシュのアドレスです。
data:image/jpg;base64,/9j/4AAQSkZJ・・・
はMIME Base64 エンコード文字列というものです(カンマまでは画像のbase64文字列ですよということを表しています)。画像のようなバイナリデータを文字列として変換してHTML(ハイパーテキスト)でやり取りする形式です。

で、これをImageに戻してあげるには以下のようにすればいいと思います。
If src.StartsWith("data"Then
    ' base64からバイナリ配列に変換、それをメモリストリームとして使用する 
    Dim ms As New MemoryStream(Convert.FromBase64String(src.Split(CChar(","))(1)))
    ' ストリームからImageを作成する 
    Dim img As Image = Image.FromStream(ms)
    ' ストリームを閉じる 
    ms.Close()
Else
    lstFile.Items.Add(src) '文字があれば追加  
End If

エラー処理とかは書いてません。

なお、http:// で始まる画像のアドレスが取得できているのであれば、
WebClientクラスを使うと似たような感じで取得できたような記憶があります。
※ System.Webの参照設定を追加する必要があったかも。