C#如何增加图片的色调?

发布于 2024-12-03 05:55:06 字数 1308 浏览 1 评论 0原文

我有一张图片,里面有文字。我已经使用 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, .3f, 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;
}

现在,这是相当灰度的(黑白色调)。我想增加黑色调并使其变暗,这可以用 Photoshop 来实现。请告诉我如何在 C# 中实现这一目标?

请告诉我。

干杯! :)

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, .3f, 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! :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你的他你的她 2024-12-10 05:55:06

一种方法是通常强制像素变暗,尝试迭代位图中的所有像素(颜色对象),并将它们替换为按百分比变暗的新颜色
这段代码可能会有所帮助

    /// <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);
            }
        }
    }

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);
            }
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文