C#的WinForm开发问题:如果提取WebBrowser中加载的某个图片流到某个PictureBox?

gzaiken 2009-07-07 12:14:45
使用WebBrowser空间加载了一个URL页面,URL里面包含一些图片,等这个图片加载完成后,我想读取该页面里面的某个ID标识的图片,然后将该图片流加载到WinForm窗体的其他某个PictureBox控件中,应该如何实现呢?
...全文
1768 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_getdb_net 2009-08-07
  • 打赏
  • 举报
回复
如果能直接另存为就好了
wdgphc 2009-07-07
  • 打赏
  • 举报
回复
public static Image GetRegCodePic(WebBrowser wbMail, string ImgName, string Src, string Alt)
{
HTMLDocument doc = (HTMLDocument)wbMail.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img;
if (ImgName == "") //如果没有图片的名字,通过Src或Alt中的关键字来取
{
int ImgNum = GetPicIndex(wbMail, Src, Alt);
if (ImgNum == -1) return null;
Img = (IHTMLControlElement)wbMail.Document.Images[ImgNum].DomElement;
}
else
Img = (IHTMLControlElement)wbMail.Document.All[ImgName].DomElement;

rang.add(Img);
rang.execCommand("Copy", false, null);
Image RegImg = Clipboard.GetImage();
Clipboard.Clear();
return RegImg;
}

public static int GetPicIndex(WebBrowser wbMail, string Src, string Alt)
{
int imgnum = -1;
for (int i = 0; i < wbMail.Document.Images.Count; i++) //获取所有的Image元素
{
IHTMLImgElement img = (IHTMLImgElement)wbMail.Document.Images[i].DomElement;
if (Alt == "")
{
if (img.src.Contains(Src)) return i;
}
else
{
if (!string.IsNullOrEmpty(img.alt))
{
if (img.alt.Contains(Alt)) return i;
}
}
}
return imgnum;
}


调用
pictureBox1.Image = GetRegCodePic(webBrowser1, "", "", ""); //第2-4个参数自己填
zgke 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 andyqq8 的回复:]
引用 3 楼 cpio 的回复:
把那个ID的图片SRC得到

然后用WebClient.DownloadData获取图片内容byte[],转成Stream,再用Image.FromStream就可以变成Image了,再设置Picturebox控件的Image属性

===========================
这样不是下载两次图片了呀
[/Quote]

是需要加载两次的..除非考虑使用低层的方法找到IE的临时文件..
andyqq8 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cpio 的回复:]
把那个ID的图片SRC得到

然后用WebClient.DownloadData获取图片内容byte[],转成Stream,再用Image.FromStream就可以变成Image了,再设置Picturebox控件的Image属性
[/Quote]
===========================
这样不是下载两次图片了呀
andyqq8 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zgke 的回复:]
HtmlElement _Element = webBrowser1.Document.GetElementById("HTML的ID");
Uri _ImageUri = new Uri(_Element.GetAttribute("SRC").ToString());


pictureBox1.Load(_ImageUri.ToString()); //直接显示

System.Net.WebClient _WebClinet = new System.Net.WebClient();
byte[] _ImageByte = _WebClinet.DownloadData(_ImageUri); //获取流
[/Quote]

=====================================
除了("HTML的ID");还有哪些参数需要替换呀?我替换了("图片的id");pictureBox1没有显示出来呀
zgke 2009-07-07
  • 打赏
  • 举报
回复
HtmlElement _Element = webBrowser1.Document.GetElementById("HTML的ID");
Uri _ImageUri = new Uri(_Element.GetAttribute("SRC").ToString());


pictureBox1.Load(_ImageUri.ToString()); //直接显示

System.Net.WebClient _WebClinet = new System.Net.WebClient();
byte[] _ImageByte = _WebClinet.DownloadData(_ImageUri); //获取流
cpio 2009-07-07
  • 打赏
  • 举报
回复
把那个ID的图片SRC得到

然后用WebClient.DownloadData获取图片内容byte[],转成Stream,再用Image.FromStream就可以变成Image了,再设置Picturebox控件的Image属性
lhzyn 2009-07-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090702/11/845F5AC5-48F2-463A-8271-47C5EEB33CAB.html
jishengzu 2009-07-07
  • 打赏
  • 举报
回复
发个网址来
andyqq8 2009-07-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090707/12/0228a1c7-5ba3-424d-b4de-7c5b787c7bfb.html?93481
================================
楼上各位前辈麻烦看下我这个webbrowser调用本地网页自动填表登陆如果先获取session呢?
andyqq8 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 andyqq8 的回复:]
引用 8 楼 wdgphc 的回复:
C# codepublicstatic Image GetRegCodePic(WebBrowser wbMail,string ImgName,string Src,string Alt)
        {
            HTMLDocument doc= (HTMLDocument)wbMail.Document.DomDocument;
            HTMLBody body= (HTMLBody)doc.body;
            IHTMLControlRange rang= (IHTMLControlRange)body.createControlRange();
            IHTMLControlElement Img;if (ImgName=="")//如果没有图片的名字,通过Src或Alt中的关键字来取            {int ImgNum= GetPicIndex(wbMail, Src, Alt);if (ImgNum==-1)returnnull;
                Img= (IHTMLControlElement)wbMail.Document.Images[ImgNum].DomElement;
            }else
                Img= (IHTMLControlElement)wbMail.Document.All[ImgName].DomElement;

            rang.add(Img);
            rang.execCommand("Copy",false,null);
            Image RegImg= Clipboard.GetImage();
            Clipboard.Clear();return RegImg;
        }publicstaticint GetPicIndex(WebBrowser wbMail,string Src,string Alt)
        {int imgnum=-1;for (int i=0; i < wbMail.Document.Images.Count; i++) //获取所有的Image元素            {
                IHTMLImgElement img= (IHTMLImgElement)wbMail.Document.Images[i].DomElement;if (Alt=="")
                {if (img.src.Contains(Src))return i;
                }else
                {if (!string.IsNullOrEmpty(img.alt))
                    {if (img.alt.Contains(Alt))return i;
                    }
                }
            }return imgnum;
        }

调用
pictureBox1.Image = GetRegCodePic(webBrowser1, "", "", "");  //第2-4个参数自己填


================================
HTMLBody
IHTMLControlRange

IHTMLControlElement
=======================
这几个类我这里没有呀。请教哪里弄出来呀

[/Quote]


弄出来了。只用下载一次。。测试代码完全有效,一字不改显示出图片来了。楼主快出来谢谢楼上各位前辈

andyqq8 2009-07-07
  • 打赏
  • 举报
回复
如果要下载两址。一般直接引用图片地址到pictureBox1就行了呀
wuyq11 2009-07-07
  • 打赏
  • 举报
回复
首先需要添加mshtml的引用,之后using mshtml;
andyqq8 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wdgphc 的回复:]
C# codepublicstatic Image GetRegCodePic(WebBrowser wbMail,string ImgName,string Src,string Alt)
{
HTMLDocument doc= (HTMLDocument)wbMail.Document.DomDocument;
HTMLBody body= (HTMLBody)doc.body;
IHTMLControlRange rang= (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img;if (ImgName=="")//如果没有图片的名字,通过Src或Alt中的关键字来取 {int ImgNum= GetPicIndex(wbMail, Src, Alt);if (ImgNum==-1)returnnull;
Img= (IHTMLControlElement)wbMail.Document.Images[ImgNum].DomElement;
}else
Img= (IHTMLControlElement)wbMail.Document.All[ImgName].DomElement;

rang.add(Img);
rang.execCommand("Copy",false,null);
Image RegImg= Clipboard.GetImage();
Clipboard.Clear();return RegImg;
}publicstaticint GetPicIndex(WebBrowser wbMail,string Src,string Alt)
{int imgnum=-1;for (int i=0; i< wbMail.Document.Images.Count; i++) //获取所有的Image元素 {
IHTMLImgElement img= (IHTMLImgElement)wbMail.Document.Images[i].DomElement;if (Alt=="")
{if (img.src.Contains(Src))return i;
}else
{if (!string.IsNullOrEmpty(img.alt))
{if (img.alt.Contains(Alt))return i;
}
}
}return imgnum;
}

调用
pictureBox1.Image = GetRegCodePic(webBrowser1, "", "", "");  //第2-4个参数自己填
[/Quote]

================================
HTMLBody
IHTMLControlRange

IHTMLControlElement
=======================
这几个类我这里没有呀。请教哪里弄出来呀
wuyq11 2009-07-07
  • 打赏
  • 举报
回复
获取地址再下载图片转化或
参考

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧