抓取网页图片问题 请问怎么用C#程序实现抓取网页上的图片?然后把该图片保存为相应格式(jpg、gif…)?可以的话麻烦给出代码~多谢啦!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/hertcloud/archive/2007/03/14/1528971.aspx通过HttpWebResponse和HttpWebRequest 获取http地址上的图片 主要思想:使用IE控件先显示网页,然后使用API函数将其绘画内容写入image对象,然后保存。主要函数,传入IE控件public static Image Capture(Control control, ImageSettingInfo imageInfo)codeproject有个示例,可以拍摄一个很大的网页的图片,我这个只能拍摄当前显示的内容,但可以拍摄任何控件。以下是代码:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Text;using System.Runtime.InteropServices;using System.Diagnostics;using System.IO;using System.Drawing.Imaging;using BaseFrame.ShareFunction;namespace BaseFrame.Images{ /// <summary> /// 捕获窗口的影响 /// </summary> public sealed class CaptureImage { // Violates rule: StaticHolderTypesShouldNotHaveConstructors. // Uncomment the following line to correct the violation. private CaptureImage() { } [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern Boolean PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags); #region 常量 /// <summary> /// 画图开始X坐标 /// </summary> public const int BRWTOP = 0; /// <summary> /// Y坐标 /// </summary> public const int BRWLEFT = 0; /// <summary> /// 图片质量 /// </summary> public const long QUALITY = 100; /// <summary> /// 原图大小 /// </summary> public const double RESOLUTION = 1.0; #endregion //public delegate void CaptureHandler(); //public static event CaptureHandler CaptureImageEvent; //public delegate void ThumbnailHandler(); //public static event ThumbnailHandler ThumbnailImageEvent; public static Image Capture(Control control, ImageSettingInfo imageInfo) { Debug.Assert(control != null); if (control == null) { throw new ArgumentNullException("control is null"); } Debug.Assert(imageInfo != null); if (imageInfo == null) { throw new ArgumentNullException("imageInfo is null"); } IntPtr hwnd = control.Handle; //Get bitmap to hold screen fragment. Bitmap bm = null; Graphics g = null; IntPtr hdc; //Image screenfrag = null; Bitmap finalImage = null; Image originalImage = null; try { // 计算最终图片大小 int finalWidth = (int)((imageInfo.ImageWidth) * RESOLUTION); int finalHeight = (int)((imageInfo.ImageHeight) * RESOLUTION); bm = new Bitmap(finalWidth, finalHeight, System.Drawing.Imaging.PixelFormat.Format32bppRgb); g = Graphics.FromImage(bm); hdc = g.GetHdc(); // 绘画目标窗口到 hdc PrintWindow(hwnd, hdc, 0); g.ReleaseHdc(hdc); g.Flush(); g.DrawImage(bm, BRWLEFT, BRWTOP, finalWidth, finalHeight); //Write Image. EncoderParameters eps = new EncoderParameters(1); eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, QUALITY); ImageCodecInfo ici = GetEncoderInfo("image/" + imageInfo.ImageFormat.ToString().ToLower()); // 确保保存路径存在 if (!Directory.Exists(Path.GetDirectoryName(imageInfo.ImageSavePath))) { Directory.CreateDirectory(Path.GetDirectoryName(imageInfo.ImageSavePath)); } // 保存图片 bm.Save(imageInfo.ImageSavePath, ici, eps); // 返回最终图片 originalImage = Image.FromHbitmap(bm.GetHbitmap()); } catch (ExternalException ex) { LogInfo.Log(ex); } catch (IOException ex) { LogInfo.Log(ex); } catch (Exception ex) { LogInfo.Log(ex); } finally { if (g != null) g.Dispose(); if (bm != null) bm.Dispose(); if (finalImage != null) finalImage.Dispose(); } return originalImage; } private static ImageCodecInfo GetEncoderInfo(String mimeType) { ImageCodecInfo[] encoders; encoders = ImageCodecInfo.GetImageEncoders(); for (int j = 0; j < encoders.Length; ++j) { if (encoders[j].MimeType == mimeType) return encoders[j]; } return null; } }} 如何实现C#绘制动态实时的曲线图?(解决给分) 如何保留2位小数 C# DataSet使用ReadXml方法的问题 如何修改VS 2005的快捷键? .net vs 2003 DateTime问题? 请问我这样的process如果结束掉? 用vs2008设计的windows 窗体程序,怎样实现最大化时整体都显示,而不是小布局的显示 实现复制对象操作的方案 为什么往Access数据库插入数据会漏掉一条数据 docx怎么在Microsoft visual Studio2010用 怎样提取HTTP头里面的信息 问一个简单的问题
主要思想:
使用IE控件先显示网页,然后使用API函数将其绘画内容写入image对象,然后保存。
主要函数,传入IE控件
public static Image Capture(Control control, ImageSettingInfo imageInfo)codeproject有个示例,可以拍摄一个很大的网页的图片,我这个只能拍摄当前显示的内容,但可以拍摄任何控件。以下是代码:using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
using System.Drawing.Imaging;using BaseFrame.ShareFunction;namespace BaseFrame.Images
{
/// <summary>
/// 捕获窗口的影响
/// </summary>
public sealed class CaptureImage
{
// Violates rule: StaticHolderTypesShouldNotHaveConstructors.
// Uncomment the following line to correct the violation.
private CaptureImage() { } [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern Boolean PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags); #region 常量
/// <summary>
/// 画图开始X坐标
/// </summary>
public const int BRWTOP = 0;
/// <summary>
/// Y坐标
/// </summary>
public const int BRWLEFT = 0;
/// <summary>
/// 图片质量
/// </summary>
public const long QUALITY = 100;
/// <summary>
/// 原图大小
/// </summary>
public const double RESOLUTION = 1.0;
#endregion //public delegate void CaptureHandler(); //public static event CaptureHandler CaptureImageEvent; //public delegate void ThumbnailHandler(); //public static event ThumbnailHandler ThumbnailImageEvent; public static Image Capture(Control control, ImageSettingInfo imageInfo)
{
Debug.Assert(control != null);
if (control == null)
{
throw new ArgumentNullException("control is null");
}
Debug.Assert(imageInfo != null);
if (imageInfo == null)
{
throw new ArgumentNullException("imageInfo is null");
} IntPtr hwnd = control.Handle;
//Get bitmap to hold screen fragment.
Bitmap bm = null; Graphics g = null;
IntPtr hdc;
//Image screenfrag = null; Bitmap finalImage = null; Image originalImage = null;
try
{
// 计算最终图片大小
int finalWidth = (int)((imageInfo.ImageWidth) * RESOLUTION);
int finalHeight = (int)((imageInfo.ImageHeight) * RESOLUTION); bm = new Bitmap(finalWidth, finalHeight, System.Drawing.Imaging.PixelFormat.Format32bppRgb); g = Graphics.FromImage(bm); hdc = g.GetHdc(); // 绘画目标窗口到 hdc
PrintWindow(hwnd, hdc, 0); g.ReleaseHdc(hdc); g.Flush(); g.DrawImage(bm, BRWLEFT, BRWTOP, finalWidth, finalHeight); //Write Image.
EncoderParameters eps = new EncoderParameters(1); eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, QUALITY); ImageCodecInfo ici = GetEncoderInfo("image/" + imageInfo.ImageFormat.ToString().ToLower()); // 确保保存路径存在
if (!Directory.Exists(Path.GetDirectoryName(imageInfo.ImageSavePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(imageInfo.ImageSavePath));
} // 保存图片
bm.Save(imageInfo.ImageSavePath, ici, eps); // 返回最终图片
originalImage = Image.FromHbitmap(bm.GetHbitmap());
}
catch (ExternalException ex)
{
LogInfo.Log(ex);
}
catch (IOException ex)
{
LogInfo.Log(ex);
}
catch (Exception ex)
{
LogInfo.Log(ex);
}
finally
{
if (g != null)
g.Dispose();
if (bm != null)
bm.Dispose();
if (finalImage != null)
finalImage.Dispose();
} return originalImage;
} private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
}
}