c#下分割图像的几种办法

来源:互联网 发布:淘宝视频怎么下载 编辑:程序博客网 时间:2024/05/20 16:33
Bitmap   bb   =   (Bitmap)Image.FromFile("...");  
  Bitmap   sepbitmap1=   bb.Clone(new   System.Drawing.Rectangle(0,0,20,20),System.Drawing.Imaging.PixelFormat.Format32bppPArgb);  
 


Image   image   =   System.Drawing.Image.FromFile("a.jpg",true);  
  Bitmap   bmp   =   new   Bitmap(400,400);  
  Graphics   grap   =   Graphics.FromImage(bmp);  
  grap.Clear(Color.Transparent);  
  grap.DrawImage(image,new   Rectangle(0,0,400,400));  
     如果a.jpg的大小是4000*4000,这样在新的图像中得到的就是左上角起的400*400的一部份.  
  若要10*10,则用循环就可实现  





[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   //   光栅的处理数值  
  )   ;  
   
  private   void   button1_Click(object   sender,   System.EventArgs   e)  
  {  
  try  
  {  
  string   file   =   null;  
  Bitmap   bmp   =   null;  
  IntPtr   dc1   =   IntPtr.Zero;  
  IntPtr   dc2   =   IntPtr.Zero;  
  int   row   =   2,   col   =   2;  
   
  int   left   =   0,   top   =0   ,   width   =   0,   height   =   0;  
  for(int   i=0;   i<row;   i++)  
  {  
  left   =   0;  
  top   =   i   *   ((int)(this.pictureBox1.Height   /   row));  
  for(int   j=0;   j<col;   j++)  
  {  
  file   =   @"c:/"+   i.ToString()   +   j.ToString()   +".bmp";  
  if   (j   ==   col-1)    
  width   =   this.pictureBox1.Width   -   ((int)(this.pictureBox1.Width   /   col))   *   j;  
  else  
  width   =   (int)(this.pictureBox1.Width   /   col);  
   
  if   (i   ==   row-1)    
  height   =   this.pictureBox1.Height   -   ((int)(this.pictureBox1.Height   /   row))   *   i;  
  else  
  height   =   (int)(this.pictureBox1.Height   /   row);  
   
                                                  Graphics   g1   =   this.pictureBox1.CreateGraphics();  
  bmp   =   new   Bitmap(width,   height,   g1);  
  Graphics   g2   =   Graphics.FromImage(bmp);  
  dc1   =   g1.GetHdc();  
  dc2   =   g2.GetHdc();  
   
   
  BitBlt   (dc2   ,   0   ,   0   ,   width   ,   height   ,   dc1   ,   left   ,   top   ,   13369376   )   ;  
  g1.ReleaseHdc(dc1)   ;  
  g2.ReleaseHdc(dc2)   ;  
  g1.Dispose();  
  g2.Dispose();  
  bmp.Save(file,   System.Drawing.Imaging.ImageFormat.Bmp);  
   
  left   +=   width;  
   
  }  
  }  
   
  }  
  catch(Exception   ex)  
  {  
  MessageBox.Show(ex.ToString());  
  }  
   
  }