2012-10-14 44 views
1

我有一个程序从网页复制图像并将其保存到本地。在某些网页上,保存的图像是完全黑屏。首先,我认为这是代码中的问题,并没有把好的图片。所以我开始调查。我手动去这些页面,并试图复制图像(右键单击,复制图像),它仍然返回一个黑色的图像。有人能告诉我如何绕过代码?这里是目前的代码,它适用于大多数图片从页面复制图像导致黑色图像

IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.DomDocument; 
     IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange(); 

     foreach (IHTMLImgElement img in doc.images) 
     { 
      if (img.alt != "my image alt") 
       continue; 
      imgRange.add((IHTMLControlElement)img); 

      imgRange.execCommand("Copy", false, null); 

      using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap)) 
      { 
       if (bmp != null) 
       { 
        bmp.Save("testimg.jpg"); 
       } 
      } 
     } 
+0

哪些页面? Flash是否涉及? – SLaks

+0

@SLaks nope不涉及Flash。 http://bestsoftware2download.com/submit.php从本网页的验证码图片例如....尝试直接从浏览器复制粘贴 –

+0

该图像具有透明背景。 – SLaks

回答

1

该图像具有透明背景。
因此,图像中的每个像素都是黑色的,但其中大部分都是完全透明的。

由于.jpg文件不支持透明度,因此将其保存为.jpg会导致黑色图像。

如果将它保存为.png文件(它确实支持透明度),它应该可以工作。

+0

试过bmp.Save(path,ImageFormat.Png),图像仍然是黑色的。还尝试了ImageFormat类中的所有图像格式,但都没有成功。我也看着ImageCodecInfo类,但没有设法使其工作 –

+0

@CristiM:然后这可能是一个复制操作的问题;我无法让IE浏览器复制透明度。 – SLaks

+0

你知道我可以用winform修改webBrowser控件的任何方式来做到这一点?顺便说一句,我试图从铬复制到Photoshop的图像,没有结果。或者我可以使用的其他建议? –