【问题标题】:Changing image brightness for transparent images更改透明图像的图像亮度
【发布时间】:2018-03-01 07:12:44
【问题描述】:

我一直在使用从 here 找到的代码来更改图像的亮度

public Bitmap SetBrightness(Bitmap bmap, int brightness)
    {
        if (brightness < -255) brightness = -255;
        if (brightness > 255) brightness = 255;
        Color c;
        for (int i = 0; i < bmap.Width; i++)
        {
            for (int j = 0; j < bmap.Height; j++)
            {
                c = bmap.GetPixel(i, j);
                int cR = c.R + brightness;
                int cG = c.G + brightness;
                int cB = c.B + brightness;

                if (cR < 0) cR = 1;
                if (cR > 255) cR = 255;

                if (cG < 0) cG = 1;
                if (cG > 255) cG = 255;

                if (cB < 0) cB = 1;
                if (cB > 255) cB = 255;

                bmap.SetPixel(i, j, Color.FromArgb((byte)cR, (byte)cG, (byte)cB));
            }
        }
        return bmap;
    }

它适用于非透明图像,但当尝试将其应用于透明图像时,它也会填满透明部分。例如,here 是我之前透明的原始图像,here 是之后。我只想使图像的不透明部分变暗,而不是透明背景。

【问题讨论】:

  • 你正在改变所有的像素,首先检查它是否不是透明像素然后改变它
  • GetPixelSetPixel 非常慢,但是...考虑使用 LockBitsMarshal.Copy

标签: c# image brightness


【解决方案1】:

当您致电Color.FromArgb 时,您未提供 Alpha 通道,请尝试此操作,看看是否效果更好:

public Bitmap SetBrightness(Bitmap bmap, int brightness)
{
    if (brightness < -255) brightness = -255;
    if (brightness > 255) brightness = 255;
    Color c;
    for (int i = 0; i < bmap.Width; i++)
    {
        for (int j = 0; j < bmap.Height; j++)
        {
            c = bmap.GetPixel(i, j);
            int cR = c.R + brightness;
            int cG = c.G + brightness;
            int cB = c.B + brightness;

            if (cR < 0) cR = 1;
            if (cR > 255) cR = 255;

            if (cG < 0) cG = 1;
            if (cG > 255) cG = 255;

            if (cB < 0) cB = 1;
            if (cB > 255) cB = 255;

            bmap.SetPixel(i, j, Color.FromArgb(c.A, (byte)cR, (byte)cG, (byte)cB));
        }
    }
    return bmap;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2012-09-18
    • 2021-10-08
    相关资源
    最近更新 更多