截取图片的某个部分(C#源代码)

方法一(get/set pixel)

核心语句:

resultBitmap.SetPixel(x, y, sourceBitmap.GetPixel(offsetX + x, offsetY+y))

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
1 /// <summary>
2 /// get a certain rectangle part of a known graphic
3 /// </summary>
4 /// <param name="bitmapPathAndName"> path and name of the source graphic </param>
5 /// <param name="width"> width of the part graphic </param>
6 /// <param name="height"> height of the part graphic </param>
7 /// <param name="offsetX"> the width offset in the source graphic </param>
8 /// <param name="offsetY"> the height offset in the source graphic </param>
9 /// <returns> wanted graphic </returns>
10   public Bitmap GetPartOfImage( string bitmapPathAndName, int width, int height, int offsetX, int offsetY)
11 {
12 Bitmap sourceBitmap = new Bitmap(bitmapPathAndName);
13 Bitmap resultBitmap = new Bitmap(width, height);
14 for ( int x = 0 ; x < width; x ++ )
15 {
16 for ( int y = 0 ; y < height; y ++ )
17 {
18 if (offsetX + x < sourceBitmap.Size.Width & offsetY + y < sourceBitmap.Size.Height)
19 {
20 resultBitmap.SetPixel(x, y, sourceBitmap.GetPixel(offsetX + x, offsetY + y));
21 }
22 }
23 }
24 return resultBitmap;
25 }

该方法速度较慢

方法二(graphics.drawimage)

核心代码:

Graphics g = Graphics.FromImage(resultBitmap)

g.DrawImage(sourceBitmap, resultRectangle, sourceRectangle, GraphicsUnit.Pixel)

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
1 /// <summary>
2 /// get a certain rectangle part of a known graphic
3 /// </summary>
4 /// <param name="bitmapPathAndName"> path and name of the source graphic </param>
5 /// <param name="width"> width of the part graphic </param>
6 /// <param name="height"> height of the part graphic </param>
7 /// <param name="offsetX"> the width offset in the source graphic </param>
8 /// <param name="offsetY"> the height offset in the source graphic </param>
9 /// <returns> wanted graphic </returns>
10   public Bitmap GetPartOfImage( string bitmapPathAndName, int width, int height, int offsetX, int offsetY)
11 {
12 Bitmap sourceBitmap = new Bitmap(bitmapPathAndName);
13 Bitmap resultBitmap = new Bitmap(width, height);
14 using (Graphics g = Graphics.FromImage(resultBitmap))
15 {
16 Rectangle resultRectangle = new Rectangle( 0 , 0 , Width, height);
17 Rectangle sourceRectangle = new Rectangle( 0 + offsetX, 0 + offsetY, Width, height);
18 g.DrawImage(sourceBitmap, resultRectangle, sourceRectangle, GraphicsUnit.Pixel);
19 }
20 return resultBitmap;
21 }

速度较快,可完全鄙视掉方法一

转载于:https://www.cnblogs.com/snigoal/archive/2008/03/23/1118209.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值