最近写一个截图工具,其中主要的一段函数是指定两个点,从原图中截取这两个点所包围的矩形图片。我采用的是逐个读取原图中指定范围内的像素,然后搬运到新图片中。这个效率很低,时间复杂度为O(N * N),截取整个屏幕大小的图片时,有明显的延时。代码如下:
//根据两个Point的坐标,对bmp进行截图。这是暴力算法,速度很慢
public static Bitmap cutImage0(Bitmap bmp, Point startPoint, Point endPoint)
{
int startX = startPoint.X;
int startY = startPoint.Y;
int endX = endPoint.X;
int endY = endPoint.Y;
if (startX == endX || startY == endY)
{
return null; //图片的宽度和高度一定都是大于0的整数
}
if(startX > endX) //一定要保证startX < endX
{