如题....

解决方案 »

  1.   

    http://www.cnblogs.com/flying_bat/articles/757421.html
    http://www.cnblogs.com/anchky/archive/2006/10/21/535661.aspx
      

  2.   


                Bitmap _Bitmap =new Bitmap(100,100);          //创建图形
                Graphics _Graphics = Graphics.FromImage(_Bitmap);  //获取GDI+绘图
                _Graphics.DrawString("A", new Font("宋体", 20), Brushes.Yellow, 0, 0); //绘制问题
                _Graphics.Dispose();  //释放资源            _Bitmap.Save(@"C:\1.bmp", ImageFormat.Bmp);  //保存文件
      

  3.   

    谢谢,如何将位图通过"gdi32.dll"画到控件上呢?
      

  4.   

    gdi+画图太耗资源了,所以得用"gdi32.dll"画
      

  5.   

    1/**///// <summary>
     2/// 改变图像透明度(真透明)
     3/// </summary>
     4/// <param name="img">所要转变的图像</param>
     5/// <param name="alpha">透明度,最大为1,最小为0</param>
     6/// <returns>改变后的图像</returns>
     7public static Bitmap VitrificationImage(Image img, float alpha)
     8{
     9    Bitmap _newImg = new Bitmap(img.Width, img.Height);
    10 
    11    using (Graphics _g = Graphics.FromImage(_newImg))
    12    {
    13        using (ImageAttributes _imageAttrs = new ImageAttributes())
    14        {
    15            _imageAttrs.SetColorMatrix(new ColorMatrix(CreateAlphaMatrix(alpha)));
    16 
    17            _g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height),
    18                        1, 1, img.Width, img.Height, GraphicsUnit.Pixel, _imageAttrs);
    19        }
    20    }
    21 
    22    return _newImg;
    23}
    24 
    25/**///// <summary>
    26/// 创建用于改变图像透明度的颜色矩阵
    27/// </summary>
    28/// <param name="alpha">所要设置的透明度</param>
    29/// <returns>返回用于图像转换的颜色矩阵</returns>
    30private static float[][] CreateAlphaMatrix(float alpha)
    31{
    32    if (alpha > 1)
    33        alpha = 1;
    34 
    35    if (alpha < 0)
    36        alpha = 0;
    37 
    38    float[][] _matrix =
    39    { 
    40                new float[] {1, 0, 0, 0, 0},
    41                new float[] {0, 1, 0, 0, 0},
    42                new float[] {0, 0, 1, 0, 0},
    43                new float[] {0, 0, 0, alpha, 0},
    44                new float[] {0, 0, 0, 0, 1}
    45    };
    46 
    47    return _matrix;
    48}
      

  6.   

    用gdi32.dll的如下用C#来捕获屏幕的源程序代码(Capture.cs)[code=C#]using System ; 
      using System.Drawing ; 
      using System.Collections ; 
      using System.ComponentModel ; 
      using System.Windows.Forms ; 
      using System.Data ; 
      using System.Drawing.Imaging ; 
      public class Form1 : Form 
      { 
       private Button button1 ; 
       private System.ComponentModel.Container components = null ; 
       
       public Form1 ( ) 
       { 
       //初始化窗体中的各个组件 
       InitializeComponent ( ) ; 
       } 
       // 清除程序中使用过的资源 
       protected override void Dispose ( bool disposing ) 
       { 
       if ( disposing ) 
       { 
       if ( components != null ) 
       { 
       components.Dispose ( ) ; 
       } 
       } 
       base.Dispose ( disposing ) ; 
       } 
       private void InitializeComponent ( ) 
       { 
       button1 = new Button ( ); 
       SuspendLayout ( ) ; 
       button1.Location = new System.Drawing.Point ( 64 , 40 ) ; 
       button1.Name = "button1" ; 
       button1.Size = new System.Drawing.Size ( 80 , 32 ) ; 
       button1.TabIndex = 0 ; 
       button1.Text = "捕获" ; 
       button1.Click += new System.EventHandler ( button1_Click ) ; 
       
       AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ; 
       ClientSize = new System.Drawing.Size ( 216 , 125 ) ; 
       Controls.Add ( button1 ) ; 
       MaximizeBox = false ; 
       MinimizeBox = false ; 
       Name = "Form1" ; 
       Text = "C#捕获当前屏幕!" ; 
       ResumeLayout ( false ) ; 
       
       } 
       //声明一个API函数 
       [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ] 
       private static extern bool BitBlt ( 
       IntPtr hdcDest , // 目标 DC的句柄 
       int nXDest , 
       int nYDest , 
       int nWidth , 
       int nHeight , 
       IntPtr hdcSrc , // 源DC的句柄 
       int nXSrc , 
       int nYSrc , 
       System.Int32 dwRop // 光栅的处理数值 
       ) ; 
       
       static void Main ( ) 
       { 
       Application.Run ( new Form1 ( ) ) ; 
       } 
       private void button1_Click ( object sender , System.EventArgs e ) 
       { 
       //获得当前屏幕的大小 
       Rectangle rect = new Rectangle ( ) ; 
       rect = Screen.GetWorkingArea ( this ) ; 
       //创建一个以当前屏幕为模板的图象 
       Graphics g1 = this.CreateGraphics ( ) ; 
       //创建以屏幕大小为标准的位图 
       Image MyImage = new Bitmap ( rect.Width , rect.Height , g1 ) ; 
       Graphics g2 = Graphics.FromImage ( MyImage ) ; 
       //得到屏幕的DC 
       IntPtr dc1 = g1.GetHdc ( ) ; 
       //得到Bitmap的DC 
       IntPtr dc2 = g2.GetHdc ( ) ; 
       //调用此API函数,实现屏幕捕获 
       BitBlt ( dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376 ) ; 
       //释放掉屏幕的DC 
       g1.ReleaseHdc ( dc1 ) ; 
       //释放掉Bitmap的DC 
       g2.ReleaseHdc ( dc2 ) ; 
       //以JPG文件格式来保存 
       MyImage.Save ( @"c:\Capture.jpg" , ImageFormat.Jpeg ); 
       MessageBox.Show ( "当前屏幕已经保存为C盘的capture.jpg文件!" ) ; 
       } 
      } 
      #endregion 
      

  7.   

    谢谢,如何将位图通过"gdi32.dll"画到控件上呢?
      

  8.   

    一般控件有CreateGraphics()方法可以获得画布(Graphics),然后使用Graphics进行绘图
    难的是怎样持久显示图片
    对于没有CreateGraphics()方法控件,需要使用API进行获取.