如何用C#做截图,像QQ截图那样的.不是整个屏幕都截下来,而是截自己要的大小就好

解决方案 »

  1.   

    http://blog.csdn.net/zgke/archive/2009/03/04/3956936.aspx
      

  2.   

    不知道你要怎么解图,是自动还是手动楼上的是手动自动,你可以用Win32 API,查找到你的窗体坐标
      

  3.   


          Bitmap myPic = new Bitmap(r.Width, r.Height);
          Graphics g = Graphics.FromImage(myPic);
          g.CopyFromScreen(r.X, r.Y, 0, 0, new Size(r.Width, r.Height));
    具体坐标位置用Control.PointToScreen获得
    另外注意这个方法是纯粹截屏
      

  4.   

    http://topic.csdn.net/t/20020905/09/997563.html
    截图源码
      

  5.   


    这里是一个用API的例子   
      using   System   ;     
          using   System.Drawing   ;     
          using   System.Collections   ;     
          using   System.ComponentModel   ;     
          using   System.Windows.Forms   ;     
          using   System.Data   ;     
          using   System.Drawing.Imaging   ;     
          using   System.IO   ;     
          //导入在程序中使用到的名称空间     
          public   class   Capture   :   Form     
          {     
          private   System.ComponentModel.Container   components   =   null   ;     
          private   Icon   mNetTrayIcon   =   new   Icon   (   "Tray.ico"   )   ;     
          private   Bitmap   MyImage   =   null   ;     
          private   NotifyIcon   TrayIcon   ;     
          private   ContextMenu   notifyiconMnu   ;     
          public   Capture   (   )     
          {     
          //初始化窗体中使用到的组件     
          InitializeComponent   (   )   ;     
          }     
          protected   override   void   OnActivated   (   EventArgs   e   )     
          {     
          this.Hide   (   )   ;     
          }     
          [   System.Runtime.InteropServices.DllImportAttribute   (   "gdi32.dll"   )   ]     
          private   static   extern   bool   BitBlt   (     
          IntPtr   hdcDest   ,   //目标设备的句柄     
          int   nXDest   ,   //   目标对象的左上角的X坐标     
          int   nYDest   ,   //   目标对象的左上角的X坐标     
          int   nWidth   ,   //   目标对象的矩形的宽度     
          int   nHeight   ,   //   目标对象的矩形的长度     
          IntPtr   hdcSrc   ,   //   源设备的句柄     
          int   nXSrc   ,   //   源对象的左上角的X坐标     
          int   nYSrc   ,   //   源对象的左上角的X坐标     
          System.Int32   dwRop   //   光栅的操作值     
          )   ;     
          [   System.Runtime.InteropServices.DllImportAttribute   (   "gdi32.dll"   )   ]     
          private   static   extern   IntPtr   CreateDC   (     
          string   lpszDriver   ,   //   驱动名称     
          string   lpszDevice   ,   //   设备名称     
          string   lpszOutput   ,   //   无用,可以设定位"NULL"     
          IntPtr   lpInitData   //   任意的打印机数据     
          )   ;     
          public   void   capture   (   object   sender   ,   System.EventArgs   e   )     
          {     
          this.Visible   =   false   ;     
          IntPtr   dc1   =   CreateDC   (   "DISPLAY"   ,   null   ,   null   ,   (   IntPtr   )   null   )   ;     
          //创建显示器的DC     
          Graphics   g1   =   Graphics.FromHdc   (   dc1   )   ;     
          //由一个指定设备的句柄创建一个新的Graphics对象     
          MyImage   =   new   Bitmap   (   Screen.PrimaryScreen.Bounds.Width   ,   Screen.PrimaryScreen.Bounds.Height   ,   g1   )   ;     
          //根据屏幕大小创建一个与之相同大小的Bitmap对象     
          Graphics   g2   =   Graphics.FromImage   (   MyImage   )   ;     
          //获得屏幕的句柄     
          IntPtr   dc3   =   g1.GetHdc   (   )   ;     
          //获得位图的句柄     
          IntPtr   dc2   =   g2.GetHdc   (   )   ;     
          //把当前屏幕捕获到位图对象中     
          BitBlt   (   dc2   ,   0   ,   0   ,   Screen.PrimaryScreen.Bounds.Width   ,   Screen.PrimaryScreen.Bounds.Height   ,   dc3   ,   0   ,   0   ,   13369376   )   ;     
          //把当前屏幕拷贝到位图中     
          g1.ReleaseHdc   (   dc3   )   ;     
          //释放屏幕句柄     
          g2.ReleaseHdc   (   dc2   )   ;     
          //释放位图句柄     
          MyImage.Save   (   "c:\\MyJpeg.jpg"   ,   ImageFormat.Jpeg   )   ;     
          MessageBox.Show   (   "已经把当前屏幕保存到C:\\MyJpeg.jpg文件中!"   )   ;     
          this.Visible   =   true   ;     
          }     
          public   void   ExitSelect   (   object   sender   ,   System.EventArgs   e   )     
          {     
          //隐藏托盘程序中的图标     
          TrayIcon.Visible   =   false   ;     
          //关闭系统     
          this.Close   (   )   ;     
          }     
          //清除程序中使用过的资源     
          public   override   void   Dispose   (   )     
          {     
          base.Dispose   (   )   ;     
          if   (   components   !=   null   )     
          components.Dispose   (   )   ;     
          }     
          private   void   InitializeComponent   (   )     
          {     
          //设定托盘程序的各个属性     
          TrayIcon   =   new   NotifyIcon   (   )   ;     
          TrayIcon.Icon   =   mNetTrayIcon   ;     
          TrayIcon.Text   =   "用C#做Screen   Capture程序"   ;     
          TrayIcon.Visible   =   true   ;     
          //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象     
          MenuItem   [   ]   mnuItms   =   new   MenuItem   [   3   ]   ;     
          mnuItms   [   0   ]   =   new   MenuItem   (   )   ;     
          mnuItms   [   0   ]   .Text   =   "捕获当前屏幕!"   ;     
          mnuItms   [   0   ]   .Click   +=   new   System.EventHandler   (   this.capture   )   ;     
          mnuItms   [   1   ]   =   new   MenuItem   (   "-"   )   ;     
          mnuItms   [   2   ]   =   new   MenuItem   (   )   ;     
          mnuItms   [   2   ]   .Text   =   "退出系统"   ;     
          mnuItms   [   2   ]   .Click   +=   new   System.EventHandler   (   this.ExitSelect   )   ;     
          mnuItms   [   2   ]   .DefaultItem   =   true   ;     
          notifyiconMnu   =   new   ContextMenu   (   mnuItms   )   ;     
          TrayIcon.ContextMenu   =   notifyiconMnu   ;     
          //为托盘程序加入设定好的ContextMenu对象     
          this.SuspendLayout   (   )   ;     
          this.AutoScaleBaseSize   =   new   System.Drawing.Size   (   5   ,   13   )   ;     
          this.ClientSize   =   new   System.Drawing.Size   (   320   ,   56   )   ;     
          this.ControlBox   =   false   ;     
          this.MaximizeBox   =   false   ;     
          this.MinimizeBox   =   false   ;     
          this.WindowState   =   System.Windows.Forms.FormWindowState.Minimized   ;     
          this.Name   =   "capture"   ;     
          this.ShowInTaskbar   =   false   ;     
          this.Text   =   "用C#做Screen   Capture程序!"   ;     
          this.ResumeLayout   (   false   )   ;     
          }     
          static   void   Main   (   )     
          {     
          Application.Run   (   new   Capture   (   )   )   ;     
          }     
          }
      

  6.   

    http://topic.csdn.net/t/20020905/09/997563.html截图源码