更改透明图像的图像亮度
Changing image brightness for transparent images
我一直在使用从 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 is my original image with transparency before and here就是之后。我只想把图片不透明的部分加深,不加透明背景。
当您调用 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;
}
我一直在使用从 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 is my original image with transparency before and here就是之后。我只想把图片不透明的部分加深,不加透明背景。
当您调用 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;
}