我使用此代码来减少图像的深度:
public void ApplyDecreaseColourDepth(int offset)
{
int A, R, G, B;
Color pixelColor;
for (int y = 0; y < bitmapImage.Height; y++)
{
for (int x = 0; x < bitmapImage.Width; x++)
{
pixelColor = bitmapImage.GetPixel(x, y);
A = pixelColor.A;
R = ((pixelColor.R + (offset / 2)) - ((pixelColor.R + (offset / 2)) % offset) - 1);
if (R < 0)
{
R = 0;
}
G = ((pixelColor.G + (offset / 2)) - ((pixelColor.G + (offset / 2)) % offset) - 1);
if (G < 0)
{
G = 0;
}
B = ((pixelColor.B + (offset / 2)) - ((pixelColor.B + (offset / 2)) % offset) - 1);
if (B < 0)
{
B = 0;
}
bitmapImage.SetPixel(x, y, Color.FromArgb(A, R, G, B));
}
}
}
第一个问题是:我给函数的偏移量不是深度,对吗?
第二个是当我减少图像的颜色深度后尝试保存图像时,我得到的原始图像大小相同。我应该得到一个更小的文件是不是合乎逻辑的,或者我错了。
这是我用来保存修改后的图像的代码:
private Bitmap bitmapImage;
public void SaveImage(string path)
{
bitmapImage.Save(path);
}