小工具:截图&简单图像处理

时间:2024-01-10 08:51:02

一、程序运行截图

小工具:截图&简单图像处理

二、获取屏幕截图的方法

首先知道我们可以通过Screen.PrimaryScreen.Bounds获取到当前整个屏幕,再利用Bitmap和Graphics就可以得到整个屏幕的图片了。

Screen.PrimaryScreen.WorkingArea这个获得是不包含任务栏的屏幕

      获取屏幕代码如下所示:

         /// <summary>
/// 获取屏幕图片
/// </summary>
private void GetScreenImage()
{
Bitmap bitMap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bitMap);
g.CopyFromScreen(, , , , new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
}

这样获得的屏幕截图并不能满足我们的要求,我们需要的是要想QQ那样的可以可以自己选区域的截图,这个功能待以后有时间再研究如何实现。

三、简单图像处理

获得图片后,我们总是想要对它进行一些处理,实现不同的效果。为了实现一些效果,我们需要对图片的每个像素进行修改。

小工具:截图&简单图像处理

3.1 黑白效果

小工具:截图&简单图像处理

实现方法:

 1         /// <summary>
/// 黑白效果
/// </summary>
public Bitmap ImgBlackWhite(Bitmap bitmap)
{
for (int i = ; i < bitmap.Width; i++)
{
for (int j = ; j < bitmap.Height; j++)
{
Color pixel = bitmap.GetPixel(i, j);
int avg = GetBWNum(pixel, EnumUtil.Calculate.加权算法);
int r = avg;
int g = avg;
int b = avg;
bitmap.SetPixel(i, j, Color.FromArgb(r, g, b));
}
}
return bitmap;
} /// <summary>
/// 黑白效果算法
/// </summary>
/// <param name="pixel"></param>
/// <param name="calcul"></param>
/// <returns></returns>
private int GetBWNum(Color pixel, EnumUtil.Calculate calcul)
{
int result = ;
switch (calcul)
{
case EnumUtil.Calculate.加权算法:
result = ((int)(0.7 * pixel.R) + (int)(0.2 * pixel.G) + (int)(0.1 * pixel.B));
break;
case EnumUtil.Calculate.平均值:
result = (pixel.R + pixel.G + pixel.B) / ;
break;
case EnumUtil.Calculate.最大值:
result = pixel.R > pixel.G ? pixel.R : pixel.G;
result = result > pixel.B ? result : pixel.B;
break;
}
return result;
}

3.2 负片效果

小工具:截图&简单图像处理

实现方法:

         /// <summary>
/// 负片效果
/// </summary>
public Bitmap ImgNagative(Bitmap bitmap)
{
for (int i = ; i < bitmap.Width; i++)
{
for (int j = ; j < bitmap.Height; j++)
{
Color c = bitmap.GetPixel(i, j); int r = - c.R;
int g = - c.G;
int b = - c.B;
bitmap.SetPixel(i, j, Color.FromArgb(r, g, b));
}
}
return bitmap;
}

3.3 浮雕效果

小工具:截图&简单图像处理

实现方法:

         /// <summary>
/// 浮雕效果
/// </summary>
public Bitmap ImgCameo(Bitmap bitmap, EnumUtil.ImageStyle style)
{
Color pixel, pixel2; for (int i = ; i < bitmap.Width - ; i++)
{
for (int j = ; j < bitmap.Height - ; j++)
{
pixel = bitmap.GetPixel(i, j);
pixel2 = bitmap.GetPixel(i + , j + );
bitmap.SetPixel(i, j, ImgCameoCalcul(pixel, pixel2, style));
}
}
return bitmap;
} /// <summary>
/// 浮雕算法
/// </summary>
/// <param name="pixel"></param>
/// <param name="pixel2"></param>
/// <param name="style"></param>
/// <returns></returns>
private Color ImgCameoCalcul(Color pixel, Color pixel2, EnumUtil.ImageStyle style)
{
Color cResult;
int r = , g = , b = ;
switch (style)
{
case EnumUtil.ImageStyle.浮雕阴刻:
r = Math.Abs(pixel.R - pixel2.R + ) > ? : Math.Abs(pixel.R - pixel2.R + );
g = Math.Abs(pixel.G - pixel2.G + ) > ? : Math.Abs(pixel.G - pixel2.G + );
b = Math.Abs(pixel.B - pixel2.B + ) > ? : Math.Abs(pixel.B - pixel2.B + );
break;
case EnumUtil.ImageStyle.浮雕阳刻:
r = Math.Abs(pixel2.R - pixel.R + ) > ? : Math.Abs(pixel2.R - pixel.R + );
g = Math.Abs(pixel2.G - pixel.G + ) > ? : Math.Abs(pixel2.G - pixel.G + );
b = Math.Abs(pixel2.B - pixel.B + ) > ? : Math.Abs(pixel2.B - pixel.B + );
break;
}
cResult = Color.FromArgb(r, g, b);
return cResult;
}