How do I recolor an image? (see images)

后端 未结 7 673
没有蜡笔的小新
没有蜡笔的小新 2020-12-29 08:53

How do I achieve this kind of color replacement programmatically? \"replacing


So this i

7条回答
  •  借酒劲吻你
    2020-12-29 08:56

    You'll want to use a ColorMatrix here. The source image is grayscale, all its R, G and B values are equal. Then it is just a matter of replacing black with RGB = (0, 0, 255) for dark blue, white with RGB = (255, 255, 255) to get white. The matrix thus can look like this:

    1 0 0 0 0       // not changing red
    0 1 0 0 0       // not changing green
    0 0 0 0 0       // B = 0
    0 0 0 1 0       // not changing alpha
    0 0 1 0 1       // B = 255
    

    This sample form reproduces the right side image:

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        private Image mImage;
        protected override void OnPaint(PaintEventArgs e) {
            if (mImage != null) e.Graphics.DrawImage(mImage, Point.Empty);
            base.OnPaint(e);
        }
        private void button1_Click(object sender, EventArgs e) {
            using (var srce = Image.FromFile(@"c:\temp\grayscale.png")) {
                if (mImage != null) mImage.Dispose();
                mImage = new Bitmap(srce.Width, srce.Height);
                float[][] coeff = {
                                new float[] { 1, 0, 0, 0, 0 },
                                new float[] { 0, 1, 0, 0, 0 },
                                new float[] { 0, 0, 0, 0, 0 },
                                new float[] { 0, 0, 0, 1, 0 },
                                new float[] { 0, 0, 1, 0, 1 }};
                ColorMatrix cm = new ColorMatrix(coeff);
                var ia = new ImageAttributes();
                ia.SetColorMatrix(new ColorMatrix(coeff));
                using (var gr = Graphics.FromImage(mImage)) {
                    gr.DrawImage(srce, new Rectangle(0, 0, mImage.Width, mImage.Height),
                        0, 0, mImage.Width, mImage.Height, GraphicsUnit.Pixel, ia);
                }
            }
            this.Invalidate();
        }
    }
    

提交回复
热议问题