将图像转换为灰度有没有办法将图像转换为每像素格式16位灰度,而不是将每个r,g和b分量设置为亮度。我目前有一个文件bmp。Bitmap c = new Bitmap("filename");我想要一个Bitmap d,即c的灰度版本。我确实看到一个包含System.Drawing.Imaging.PixelFormat的构造函数,但我不明白如何使用它。我是Image Processing和相关C#库的新手,但对C#本身有一定的经验。任何帮助,参考在线来源,提示或建议将不胜感激。
3 回答
幕布斯7119047
TA贡献1794条经验 获得超8个赞
“我想要一个Bitmap d,即灰度。我确实看到一个包含System.Drawing.Imaging.PixelFormat的consructor,但我不明白如何使用它。”
这是怎么做的
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 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 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); //dispose the Graphics object g.Dispose(); return newBitmap;}
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
Bitmap d = new Bitmap(c.Width, c.Height);for (int i = 0; i < c.Width; i++){ for (int x = 0; x < c.Height; x++) { Color oc = c.GetPixel(i, x); int grayScale = (int)((oc.R * 0.3) + (oc.G * 0.59) + (oc.B * 0.11)); Color nc = Color.FromArgb(oc.A, grayScale, grayScale, grayScale); d.SetPixel(i, x, nc); }}
这样它也可以保持alpha通道。
冉冉说
TA贡献1877条经验 获得超1个赞
在ToolStripRenderer
类中有一个静态方法,名为CreateDisabledImage
。它的用法很简单:
Bitmap c = new Bitmap("filename");Image d = ToolStripRenderer.CreateDisabledImage(c);
它使用与接受答案中的矩阵稍微不同的矩阵,并且还将其乘以0.7的透明度,因此效果与仅灰度略有不同,但如果您想让图像变灰,那么它是最简单的最佳方案。
- 3 回答
- 0 关注
- 496 浏览
添加回答
举报
0/150
提交
取消