彩色图片转换为灰度图(方法)
2010-03-26 15:46
417 查看
private class Consts
{
// 根据 NTSC (North America Television Standards Committee)
// 规定,红绿蓝值分别为 0.299, 0.587, 0.114时为灰度图
public const float GrayRed = 0.3086f;
public const float GrayGreen = 0.6094f;
public const float GrayBlue = 0.082f;
}
/// <summary>
/// 转换彩色图片为灰度图
/// </summary>
/// <param name="image"></param>
public static void ConvertToGrayscale(Image image)
{
DrawImage(image, GetGrayscaleMatrix());
}
/// <summary>
/// 设置转换矩阵
/// </summary>
/// <returns></returns>
public static float[][] GetGrayscaleMatrix()
{
// Set the luminosity of the colors using grayscale weighting
float[][] matrix = {
new float[] {Consts.GrayRed, Consts.GrayRed, Consts.GrayRed, 0, 0},
new float[] {Consts.GrayGreen, Consts.GrayGreen, Consts.GrayGreen, 0, 0},
new float[] {Consts.GrayBlue, Consts.GrayBlue, Consts.GrayBlue, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};
return matrix;
}
/// <summary>
/// 用指定的矩形画图
/// </summary>
/// <param name="image"></param>
/// <param name="matrix"></param>
private static void DrawImage(Image image, float[][] matrix)
{
// Setup the attributes class
ColorMatrix cm = new ColorMatrix(matrix);
ImageAttributes attr = new ImageAttributes();
try
{
// Draw the image
attr.SetColorMatrix(cm);
DrawImage(image, attr);
}
finally
{
attr.Dispose();
}
}
/// <summary>
/// 用指定的属性画图
/// </summary>
/// <param name="image"></param>
/// <param name="attr"></param>
private static void DrawImage(Image image, ImageAttributes attr)
{
Graphics g = Graphics.FromImage(image);
try
{
Rectangle destRect = new Rectangle(0, 0, image.Width, image.Height);
g.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attr);
}
finally
{
g.Dispose();
}
}
{
// 根据 NTSC (North America Television Standards Committee)
// 规定,红绿蓝值分别为 0.299, 0.587, 0.114时为灰度图
public const float GrayRed = 0.3086f;
public const float GrayGreen = 0.6094f;
public const float GrayBlue = 0.082f;
}
/// <summary>
/// 转换彩色图片为灰度图
/// </summary>
/// <param name="image"></param>
public static void ConvertToGrayscale(Image image)
{
DrawImage(image, GetGrayscaleMatrix());
}
/// <summary>
/// 设置转换矩阵
/// </summary>
/// <returns></returns>
public static float[][] GetGrayscaleMatrix()
{
// Set the luminosity of the colors using grayscale weighting
float[][] matrix = {
new float[] {Consts.GrayRed, Consts.GrayRed, Consts.GrayRed, 0, 0},
new float[] {Consts.GrayGreen, Consts.GrayGreen, Consts.GrayGreen, 0, 0},
new float[] {Consts.GrayBlue, Consts.GrayBlue, Consts.GrayBlue, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};
return matrix;
}
/// <summary>
/// 用指定的矩形画图
/// </summary>
/// <param name="image"></param>
/// <param name="matrix"></param>
private static void DrawImage(Image image, float[][] matrix)
{
// Setup the attributes class
ColorMatrix cm = new ColorMatrix(matrix);
ImageAttributes attr = new ImageAttributes();
try
{
// Draw the image
attr.SetColorMatrix(cm);
DrawImage(image, attr);
}
finally
{
attr.Dispose();
}
}
/// <summary>
/// 用指定的属性画图
/// </summary>
/// <param name="image"></param>
/// <param name="attr"></param>
private static void DrawImage(Image image, ImageAttributes attr)
{
Graphics g = Graphics.FromImage(image);
try
{
Rectangle destRect = new Rectangle(0, 0, image.Width, image.Height);
g.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attr);
}
finally
{
g.Dispose();
}
}
相关文章推荐
- JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
- Android-如何将RGB彩色图转换为灰度图方法介绍
- 在ios中使用opencv将彩色图片转换成为灰度图,uiimageview无法显示问题
- 将一个Base64字符串转换成jpg图片的方法
- Android 将ARGB图片转换为灰度图
- python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)
- 24位真彩色图像转换为16位高彩色图像的实现方法及效果改进
- SpannableString与SpannableStringBuilder(把字符串转换成图片等,字符串在textview 等控件显示不同的颜色,背景样式的方法)
- 彩色BMP转换成灰度图的原理
- 将CMYK彩色空间的图片转换为RGB彩色空间的图片
- 图像由彩色图转化为灰度图的三种方法
- 图片转换成文字的方法介绍
- 将真彩色转换成增强色的方法(即RGB32位或RGB24位颜色转换成RGB16位颜色的函数)
- Python将图片转换为字符画的方法
- Qt 中彩色图像转换为灰度图
- python使用PythonMagick将jpg图片转换成ico图片的方法
- C#源代码 彩色图转换为灰度图
- CAD编辑器图片转换为CAD的方法
- VB彩色BMP图片转换为黑白图片
- jpg图片转换成pdf的方法