最近在研究图像编辑,就写了一些实用方法
分离RGB有了两个模式:
彩色:
R:(r,0,0) G(0,g,0) B(0,0,b)
灰度:
R:(r,r,r) G(g,g,g) B(b,b,b)
下面是分离/合并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)