当前位置:首页C# > 正文

C# RGB图像转为灰度图像、灰度图像转为RGB图像

作者:野牛程序员:2023-12-25 12:47:15C#阅读 2349

RGB图像可以通过将每个像素的红色(R)、绿色(G)和蓝色(B)通道的值加权平均来转换为灰度图像。以下是C#中的示例代码:

using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        // 读取RGB图像
        Bitmap rgbImage = new Bitmap("path_to_rgb_image.jpg");

        // 将RGB图像转换为灰度图像
        Bitmap grayscaleImage = ConvertToGrayscale(rgbImage);

        // 将灰度图像保存到文件
        grayscaleImage.Save("path_to_grayscale_image.jpg");

        // 将灰度图像转换回RGB图像
        Bitmap rgbImageAgain = ConvertToRGB(grayscaleImage);

        // 将RGB图像保存到文件
        rgbImageAgain.Save("path_to_rgb_image_again.jpg");
    }

    static Bitmap ConvertToGrayscale(Bitmap rgbImage)
    {
        Bitmap grayscaleImage = new Bitmap(rgbImage.Width, rgbImage.Height);

        for (int x = 0; x < rgbImage.Width; x++)
        {
            for (int y = 0; y < rgbImage.Height; y++)
            {
                Color pixel = rgbImage.GetPixel(x, y);
                int grayValue = (int)(0.3 * pixel.R + 0.59 * pixel.G + 0.11 * pixel.B);
                Color grayPixel = Color.FromArgb(grayValue, grayValue, grayValue);
                grayscaleImage.SetPixel(x, y, grayPixel);
            }
        }

        return grayscaleImage;
    }

    static Bitmap ConvertToRGB(Bitmap grayscaleImage)
    {
        Bitmap rgbImage = new Bitmap(grayscaleImage.Width, grayscaleImage.Height);

        for (int x = 0; x < grayscaleImage.Width; x++)
        {
            for (int y = 0; y < grayscaleImage.Height; y++)
            {
                Color pixel = grayscaleImage.GetPixel(x, y);
                Color rgbPixel = Color.FromArgb(pixel.R, pixel.R, pixel.R);
                rgbImage.SetPixel(x, y, rgbPixel);
            }
        }

        return rgbImage;
    }
}

请注意,这里使用了简单的加权平均方法将RGB图像转换为灰度图像。在ConvertToGrayscale方法中,0.3、0.59和0.11是常用的权重值。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击