方法一(get/setpixel)
核心语句:
resultBitmap.SetPixel(x,y, sourceBitmap.GetPixel(offsetX + x, offsetY+y))
C#代码- ///<summary>
- ///getacertainrectanglepartofaknowngraphic
- ///</summary>
- ///<paramname="bitmapPathAndName">pathandnameofthesourcegraphic</param>
- ///<paramname="width">widthofthepartgraphic</param>
- ///<paramname="height">heightofthepartgraphic</param>
- ///<paramname="offsetX">thewidthoffsetinthesourcegraphic</param>
- ///<paramname="offsetY">theheightoffsetinthesourcegraphic</param>
- ///<returns>wantedgraphic</returns>
- publicBitmapGetPartOfImage(stringbitmapPathAndName,intwidth,intheight,intoffsetX,intoffsetY)
- {
- BitmapsourceBitmap=newBitmap(bitmapPathAndName);
- BitmapresultBitmap=newBitmap(width,height);
- for(intx=0;x<width;x++)
- {
- for(inty=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));
- }
- }
- }
- returnresultBitmap;
- }
/// <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)
C#代码- ///<summary>
- ///getacertainrectanglepartofaknowngraphic
- ///</summary>
- ///<paramname="bitmapPathAndName">pathandnameofthesourcegraphic</param>
- ///<paramname="width">widthofthepartgraphic</param>
- ///<paramname="height">heightofthepartgraphic</param>
- ///<paramname="offsetX">thewidthoffsetinthesourcegraphic</param>
- ///<paramname="offsetY">theheightoffsetinthesourcegraphic</param>
- ///<returns>wantedgraphic</returns>
- publicBitmapGetPartOfImage(stringbitmapPathAndName,intwidth,intheight,intoffsetX,intoffsetY)
- {
- BitmapsourceBitmap=newBitmap(bitmapPathAndName);
- BitmapresultBitmap=newBitmap(width,height);
- using(Graphicsg=Graphics.FromImage(resultBitmap))
- {
- RectangleresultRectangle=newRectangle(0,0,Width,height);
- RectanglesourceRectangle=newRectangle(0+offsetX,0+offsetY,Width,height);
- g.DrawImage(sourceBitmap,resultRectangle,sourceRectangle,GraphicsUnit.Pixel);
- }
- returnresultBitmap;
- }
/// <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(Graphicsg=this.CreateGraphics())
{
g.CopyFromScreen(0,0,100,100,newSize(100,100));
}
原帖地址:http://wostyh.javaeye.com/blog/471765