C#实现将网页保存成图片的网页拍照功能

本文实例主要实现了网页照相机程序的功能。C#实现将网页保存成图片格式,简单实现网页拍照,主要是基于ActiveX 组件的网页快照类,AcitveX 必须实现 IViewObject 接口。因此读者完全可扩展此类将其用于你的C#软件项目中。在此特别感谢作者:随飞提供的代码。

主要功能代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Drawing;
using System.Windows.Forms;
namespace SnapLibrary
{
  /// <summary>
  /// ActiveX 组件快照类,用于网页拍照,将网页保存成图片
  /// AcitveX 必须实现 IViewObject 接口
  /// 作者:随飞
  /// </summary>
  public class Snapshot
  {
    /// <summary>
    /// 取快照
    /// </summary>
    /// <param name="pUnknown">Com 对象</param>
    /// <param name="bmpRect">图象大小</param>
    /// <returns></returns>
    public Bitmap TakeSnapshot(object pUnknown, Rectangle bmpRect)
    {
      if (pUnknown == null)
        return null;
      //必须为com对象
      if (!Marshal.IsComObject(pUnknown))
        return null;
      //IViewObject 接口
      SnapLibrary.UnsafeNativeMethods.IViewObject ViewObject = null;
      IntPtr pViewObject = IntPtr.Zero;
      //内存图
      Bitmap pPicture = new Bitmap(bmpRect.Width, bmpRect.Height);
      Graphics hDrawDC = Graphics.FromImage(pPicture);
      //获取接口
      object hret = Marshal.QueryInterface(Marshal.GetIUnknownForObject(pUnknown),
        ref UnsafeNativeMethods.IID_IViewObject, out pViewObject);
      try
      {
        ViewObject = Marshal.GetTypedObjectForIUnknown(pViewObject, typeof(SnapLibrary.UnsafeNativeMethods.IViewObject)) as SnapLibrary.UnsafeNativeMethods.IViewObject;
        //调用Draw方法
        ViewObject.Draw((int)DVASPECT.DVASPECT_CONTENT,
          -1,
          IntPtr.Zero,
          null,
          IntPtr.Zero,
          hDrawDC.GetHdc(),
          new NativeMethods.COMRECT(bmpRect),
          null,
          IntPtr.Zero,
          0);
        Marshal.Release(pViewObject);
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
        throw ex;
      }
      //释放
      hDrawDC.Dispose();
      return pPicture;
    }
  }
}
(0)

相关推荐

  • c#图片处理之图片裁剪成不规则图形

    为了让大家知道下面内容是否是自己想要的,我先发效果图. 好了,那就开始贴代码了 以下为一个按钮的事件,为裁剪准备图片.裁剪路径.保存路径 复制代码 代码如下: private void button1_Click(object sender, EventArgs e)        {            GraphicsPath path = new GraphicsPath();            Point[] p = {                            new

  • C#保存图片到数据库并读取显示图片的方法

    复制代码 代码如下: private void button2_Click_1(object sender, System.EventArgs e) { string pathName; if (this.openFileDialog1.ShowDialog()==System.Windows.Forms.DialogResult.OK) { pathName = this.openFileDialog1.FileName; System.Drawing.Image img = System.D

  • C#如何实现图片的剪裁并保存

    最近需要将一张图片上传并按指定位置剪裁,后来在网上找了一个剪裁图片的插件,但是只有前台没有后端,然后我各种百度,并最终完成,特此写一篇博客略表纪念. 前台我就不说了,用的cropper插件,有兴趣的自己去百度找找吧.我们 有这个插件. 下面是代码: HttpPostedFile file = context.Request.Files["avatar_file"]; string datasize = context.Request.Params["avatar_data&q

  • C#实现对图片文件的压缩、裁剪操作实例

    本文实例讲述了C#对图片文件的压缩.裁剪操作方法,在C#项目开发中非常有实用价值.分享给大家供大家参考.具体如下: 一般在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强人意. 于是采用C#为我们提供的图像编辑功能,实现一站式上传,通过程序生成所需大小.尺寸的目标图片. 具体步骤如下: 先说图片压缩: 第一步:需要读取一个图片文件,读取方法: //

  • c#裁剪图片后使用zxing生成二维码示例分享

    复制代码 代码如下: /// <summary>/// 生成二维码/// </summary>/// <param name="fileName">生成二维码路径</param>/// <param name="url">生成的内容</param>/// <param name="width">二维码宽</param>/// <param nam

  • C#中按指定质量保存图片的实例代码

    在程序中直接生产jpg图片,质量不如原图,是因为微软的Image.Save方法保存到图片压缩质量为75,所以保存的图片质量偏低了,要使生成的图片质量有所提高就需要自己设定EncoderParameters类的质量参数和ImageCodecInfo类的图片保存格式. System.Drawing.Imaging.Encoder类来制定需要呈现的方式和各种参数,例如图片质量参数,扫描方法参数,色度表参数,压缩参数,颜色深度等等.到此,大家应该明白修改图片质量的步骤和方法了.主要就是对System.D

  • C# 手动/自动保存图片的实例代码

    view plaincopy to clipboardprint? 复制代码 代码如下: //手动保存图片           private void saveBtn_Click(object sender, System.EventArgs e)           {               bool isSave = true;               SaveFileDialog saveImageDialog = new SaveFileDialog();          

  • C#实现在服务器端裁剪图片的方法

    本文实例讲述了C#实现在服务器端裁剪图片的方法.分享给大家供大家参考.具体实现方法如下: //图片路径 String oldPath = Server.MapPath("~/62223231.jpg"); //新图片路径 String newPath = System.IO.Path.GetExtension(oldPath); //设置截取的坐标和大小 int x = 0, y = 20, width = 200, height = 2400; //计算新的文件名,在旧文件名后加_n

  • c#利用Grahics进行图片裁剪

    最开始用了 复制代码 代码如下: /// <summary>        /// 裁剪图片        /// </summary>        /// <param name="imagePath"/>        /// <param name="savePath">"c:\images\"</param>        private List<string>

  • C#保存上传来的图片示例代码

    复制代码 代码如下: [HttpPost] public string UploadImage() { //string ss = Request.Form["uploadFile"]; //return ss; HttpPostedFileBase uploadFile = Request.Files[0]; string fileName = uploadFile.FileName; int fileSize = uploadFile.ContentLength; string f

  • C# 实现的图片盖章功能,支持拖拽、旋转、放缩、保存

    实现图片盖章功能,在图片上点击,增加"图章"小图片,可以拖拽"图章"到任意位置,也可以点击图章右下角园框,令图片跟着鼠标旋转和放缩. 操作方法:1.点击增加"图章"2.选中移动图标3.点中右下角放缩旋转图章. 效果图: 实现代码如下: 1.  窗口Xaml代码 复制代码 代码如下: <Window x:Class="Lenovo.YogaPaster.ImageEditWindow"    xmlns="htt

  • c#读取图像保存到数据库中(数据库保存图片)

    复制代码 代码如下: 注:MyTools.g_PhotoField为数据库表中的图象字段名称//将图片保存到数据库中    if(this.picPhoto.Image==null)    {     m_DataRow[MyTools.g_PhotoField]=DBNull.Value;    }    else    {     try      {      MemoryStream ms = new MemoryStream ();      picPhoto.Image.Save (

随机推荐