C# Bitmap图像分离/合并RGB方法

最近在研究图像编辑,就写了一些实用方法

分离RGB有了两个模式:

彩色:

R:(r,0,0) G(0,g,0) B(0,0,b)

C# Bitmap图像分离/合并RGB方法_第1张图片

灰度:

R:(r,r,r) G(g,g,g) B(b,b,b)

C# Bitmap图像分离/合并RGB方法_第2张图片 

 

下面是分离/合并RGB方法

合并RGB

        public static Bitmap MergeRGB(Bitmap r, Bitmap g, Bitmap b)
        {
            int x = Min(a.Width, r.Width, g.Width, b.Width);
            int y = Min(a.Height, g.Height, b.Height, r.Height);
            Bitmap result = new Bitmap(x, y);//以三个图像最小大小建立合并图像

            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y; j++)
                {
                    //用Max是为了兼容颜色模式与图像模式
                    int cR = Max(r.GetPixel(i, j).R, r.GetPixel(i, j).G, r.GetPixel(i, j).B);
                    int cG = Max(g.GetPixel(i, j).R, g.GetPixel(i, j).G, g.GetPixel(i, j).B);
                    int cB = Max(b.GetPixel(i, j).R, b.GetPixel(i, j).G, b.GetPixel(i, j).B);
                    result.SetPixel(i, j, Color.FromArgb(cR, cG, cB));
                }
            }
            return result;
        }

分离RGB(isColor:是否为颜色模式)

        public void SeparateRGB(Bitmap input, out Bitmap r, out Bitmap g, out Bitmap b, bool isColor)
        {
            Bitmap rr = new Bitmap(input.Width, input.Height);
            Bitmap gg = new Bitmap(input.Width, input.Height);
            Bitmap bb = new Bitmap(input.Width, input.Height);
            for (int y = 0; y < input.Height; y++)
            {
                for (int x = 0; x < input.Width; x++)
                {
                    Color color = input.GetPixel(x, y);
                    rr.SetPixel(x, y, isColor ? Color.FromArgb(255, color.R, 0, 0) : Color.FromArgb(color.R, color.R, color.R));
                    gg.SetPixel(x, y, isColor ? Color.FromArgb(255, 0, color.G, 0) : Color.FromArgb(color.G, color.G, color.G));
                    bb.SetPixel(x, y, isColor ? Color.FromArgb(255, 0, 0, color.B) : Color.FromArgb(color.B, color.B, color.B));
                }
            }
            r = rr;
            g = gg;
            b = bb;
        }

(作者还是学生党,自学编程,文章写的烂请不要见怪doge)

你可能感兴趣的:(Winform,c#,开发语言,图像处理,windows)