將圖像轉(zhuǎn)換為灰度有沒有辦法將圖像轉(zhuǎn)換為每像素格式16位灰度,而不是將每個r,g和b分量設(shè)置為亮度。我目前有一個文件bmp。Bitmap c = new Bitmap("filename");我想要一個Bitmap d,即c的灰度版本。我確實看到一個包含System.Drawing.Imaging.PixelFormat的構(gòu)造函數(shù),但我不明白如何使用它。我是Image Processing和相關(guān)C#庫的新手,但對C#本身有一定的經(jīng)驗。任何幫助,參考在線來源,提示或建議將不勝感激。
3 回答

幕布斯7119047
TA貢獻1794條經(jīng)驗 獲得超8個贊
“我想要一個Bitmap d,即灰度。我確實看到一個包含System.Drawing.Imaging.PixelFormat的consructor,但我不明白如何使用它。”
這是怎么做的
Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);
編輯:轉(zhuǎn)換為灰度
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條經(jīng)驗 獲得超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條經(jīng)驗 獲得超1個贊
在ToolStripRenderer
類中有一個靜態(tài)方法,名為CreateDisabledImage
。它的用法很簡單:
Bitmap c = new Bitmap("filename");Image d = ToolStripRenderer.CreateDisabledImage(c);
它使用與接受答案中的矩陣稍微不同的矩陣,并且還將其乘以0.7的透明度,因此效果與僅灰度略有不同,但如果您想讓圖像變灰,那么它是最簡單的最佳方案。
- 3 回答
- 0 關(guān)注
- 513 瀏覽
添加回答
舉報
0/150
提交
取消