Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改透明图像的图像亮度_C#_Image_Brightness - Fatal编程技术网

C# 更改透明图像的图像亮度

C# 更改透明图像的图像亮度,c#,image,brightness,C#,Image,Brightness,我一直在使用我从中找到的代码来更改图像的亮度 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;

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

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;
    }
public位图亮度(位图bmap,int亮度)
{
如果(亮度<-255)亮度=-255;
如果(亮度>255)亮度=255;
颜色c;
对于(int i=0;i255)cR=255;
如果(cG<0)cG=1;
如果(cG>255)cG=255;
如果(cB<0)cB=1;
如果(cB>255)cB=255;
bmap.SetPixel(i,j,Color.FromArgb((字节)cR,(字节)cG,(字节)cB));
}
}
返回bmap;
}

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

当您调用
颜色时。从argb
您不提供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;
}
public位图亮度(位图bmap,int亮度)
{
如果(亮度<-255)亮度=-255;
如果(亮度>255)亮度=255;
颜色c;
对于(int i=0;i255)cR=255;
如果(cG<0)cG=1;
如果(cG>255)cG=255;
如果(cB<0)cB=1;
如果(cB>255)cB=255;
bmap.SetPixel(i,j,Color.FromArgb(c.A,(字节)cR,(字节)cG,(字节)cB));
}
}
返回bmap;
}

如果要更改所有像素,请首先检查其是否为透明像素,然后更改
GetPixel
SetPixel
的速度非常慢,不过。。。考虑使用<代码>锁位< /代码>和<代码>元帅。复制< /代码>。