请问怎么用C#程序实现抓取网页上的图片?
然后把该图片保存为相应格式(jpg、gif…)?
可以的话麻烦给出代码~多谢啦!!!

解决方案 »

  1.   

    http://blog.csdn.net/hertcloud/archive/2007/03/14/1528971.aspx通过HttpWebResponse和HttpWebRequest 获取http地址上的图片
      

  2.   


    主要思想:
    使用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;
            }
        }
    }