开发者

How to increase the color tone of a picture in C#?

开发者 https://www.devze.com 2023-04-03 09:20 出处:网络
I have got the picture that has got a text in it. I have already converted that picture into grayscale by using the ColorMatrix.

I have got the picture that has got a text in it. I have already converted that picture into grayscale by using the ColorMatrix.

public Bitmap MakeGrayscale(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, .3开发者_开发知识库f, 0, 0}, // 30% red.
     new float[] {.59f, .59f, .59f, 0, 0}, // 59% green.
     new float[] {.11f, .11f, .11f, 0, 0}, // 11% blue.
     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;
}

Now, this is a fairly grayscale (black and white tone). I want to increase the black tone and make darker which I could do with Photoshop. Please let me know how can I achieve this in C#?

Please let me know.

Cheers! :)


One way is the generally enforce the pixels to be darker, try iterating over all pixels (Color objects) in the Bitmap, and replace them with new colors which are darker by a percentage This snippet might help

    /// <summary>
    /// Darkens the immage, giving a number greater then one will not brighten the image correctly
    /// </summary>
    /// <param name="bmp">The bitmap to darken</param>
    /// <param name="multiplier">The multiplier, should be less then oen to darker the picture</param>
    static void DarkenImage(Bitmap bmp, double multiplier)
    {
        for (int i = 0; i < bmp.Width; i++)
        {
            // Iterates over all the pixels
            for (int j = 0; j < bmp.Height; j++)
            {
                // Gets the current pixel
                var currentPixel = bmp.GetPixel(i, j);

                // Assigns each value the multiply, or the max value 255
                var newPixel = Color.FromArgb(
                    Math.Min((byte)255, (byte)(currentPixel.R * multiplier)),
                    Math.Min((byte)255, (byte)(currentPixel.G * multiplier)),
                    Math.Min((byte)255, (byte)(currentPixel.B * multiplier))
                    );

                // Sets the pixel 
                bmp.SetPixel(i, j, newPixel);
            }
        }
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消