方法一(get/set pixel) 核心语句: resultBitmap.SetPixel(x, y, sourceBitmap.GetPixel(offsetX + x, offsetY+y)) /// <summary> /// get a certain rectangle part of a known graphic /// </summary> /// <param name="bitmapPathAndName">path and name of the source graphic</param> /// <param name="width">width of the part graphic</param> /// <param name="height">height of the part graphic</param> /// <param name="offsetX">the width offset in the source graphic</param> /// <param name="offsetY">the height offset in the source graphic</param> /// <returns>wanted graphic</returns> public Bitmap GetPartOfImage(string bitmapPathAndName, int width, int height,int offsetX,int offsetY) { Bitmap sourceBitmap = new Bitmap(bitmapPathAndName); Bitmap resultBitmap = new Bitmap(width, height); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { if (offsetX + x < sourceBitmap.Size.Width & offsetY + y < sourceBitmap.Size.Height) { resultBitmap.SetPixel(x, y, sourceBitmap.GetPixel(offsetX + x, offsetY+y)); } } } return resultBitmap; } 该方法速度较慢 方法二(graphics.drawimage) 核心代码: Graphics g = Graphics.FromImage(resultBitmap) g.DrawImage(sourceBitmap, resultRectangle, sourceRectangle, GraphicsUnit.Pixel) /// <summary> /// get a certain rectangle part of a known graphic /// </summary> /// <param name="bitmapPathAndName">path and name of the source graphic</param> /// <param name="width">width of the part graphic</param> /// <param name="height">height of the part graphic</param> /// <param name="offsetX">the width offset in the source graphic</param> /// <param name="offsetY">the height offset in the source graphic</param> /// <returns>wanted graphic</returns> public Bitmap GetPartOfImage(string bitmapPathAndName, int width, int height, int offsetX, int offsetY) { Bitmap sourceBitmap = new Bitmap(bitmapPathAndName); Bitmap resultBitmap = new Bitmap(width, height); using (Graphics g = Graphics.FromImage(resultBitmap)) { Rectangle resultRectangle = new Rectangle(0, 0, Width, height); Rectangle sourceRectangle = new Rectangle(0+offsetX, 0+offsetY, Width, height); g.DrawImage(sourceBitmap, resultRectangle, sourceRectangle, GraphicsUnit.Pixel); } return resultBitmap; } 速度较快,可完全鄙视掉方法一 using (Graphics g = this.CreateGraphics()) { g.CopyFromScreen(0, 0, 100, 100, new Size(100, 100)); }
|
请发表评论