c# - 将图像转换为灰度

标签 c# image-processing bitmap grayscale

有没有办法将图像转换为每像素 16 位灰度格式,而不是将每个 r、g 和 b 分量设置为亮度。我目前有一个来自文件的 bmp。

Bitmap c = new Bitmap("filename");

我想要一个位图 d,它是 c 的灰度版本。我确实看到了一个包含 System.Drawing.Imaging.PixelFormat 的构造函数,但我不明白如何使用它。我是图像处理和相关 C# 库的新手,但对 C# 本身有一定的经验。

任何帮助、对在线资源的引用、提示或建议都将不胜感激。

编辑:d 是 c 的灰度版本。

最佳答案

"I want a Bitmap d, that is grayscale. I do see a consructor that includes System.Drawing.Imaging.PixelFormat, but I don't understand how to use that."

下面是方法

Bitmap grayScaleBP = new 
         System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);

编辑:转换为灰度

             Bitmap c = new Bitmap("fromFile");
             Bitmap d;
             int x, y;

             // Loop through the images pixels to reset color.
             for (x = 0; x < c.Width; x++)
             {
                 for (y = 0; y < c.Height; y++)
                 {
                     Color pixelColor = c.GetPixel(x, y);
                     Color newColor = Color.FromArgb(pixelColor.R, 0, 0);
                     c.SetPixel(x, y, newColor); // Now greyscale
                 }
             }
            d = c;   // d is grayscale version of c  

来自 switchonthecode 的更快版本点击链接进行全面分析:

public static Bitmap MakeGrayscale3(Bitmap original)
{
   //create a blank bitmap the same size as original
   Bitmap newBitmap = new Bitmap(original.Width, original.Height);

   //get a graphics object from the new image
   using(Graphics g = Graphics.FromImage(newBitmap)){

       //create the grayscale ColorMatrix
       ColorMatrix colorMatrix = new ColorMatrix(
          new float[][] 
          {
             new float[] {.3f, .3f, .3f, 0, 0},
             new float[] {.59f, .59f, .59f, 0, 0},
             new float[] {.11f, .11f, .11f, 0, 0},
             new float[] {0, 0, 0, 1, 0},
             new float[] {0, 0, 0, 0, 1}
          });

       //create some image attributes
       using(ImageAttributes attributes = new ImageAttributes()){

           //set the color matrix attribute
           attributes.SetColorMatrix(colorMatrix);

           //draw the original image on the new image
           //using the grayscale color matrix
           g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
                       0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
       }
   }
   return newBitmap;
}

关于c# - 将图像转换为灰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2265910/

相关文章:

用位图控制数组

java - Android - 如何执行回调函数来获取从图库中选择的路径图像

c# - 读取大量文件 "at the same time"

c# - IDictionary 上的 LINQ 操作

image-processing - 使用 ImageMagick 通过保留半透明像素将 32 位 png 转换为 8 位 png

image-processing - Caffe 支持 16 位图像吗?如果没有,如何实现支持?

java - 绘图 Canvas 上的二维数组网格

javascript - Kendo html 编辑器

c# - 将用户的输入传递给两个重载方法之一并显示返回字符串

iphone - 使用 OpenGL ES 应用亮度和对比度