.net正在以错误的方式保存以编程方式创建的位图

时间:2016-09-24 16:58:55

标签: c# .net bmp

我有一些代码可以创建1 * 1000像素的渐变并将其保存为bmp。

static void Main(string[] args)
{
    int height = 1000;
    int value1 = 249;
    int value2 = 227;

    string folder = "C:\\Users\\TehSuckerer\\Desktop\\Gradient\\";

    Bitmap bitmap = new Bitmap(1, height);

    for (int i = 0; i < height; ++i)
    {
        int value = Dither1D(Lerp(value1, value2, (float)i / height), i);
        bitmap.SetPixel(0, i, Color.FromArgb(value, value, value));
    }

    for (int i = 0; i < height; ++i)
    {
        Debug.WriteLine(bitmap.GetPixel(0, i).ToString());
    }

    if (!Directory.Exists(folder))
        Directory.CreateDirectory(folder);

    try
    {
        bitmap.Save(folder + "Gradient.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
    }
    catch (System.IO.IOException e)
    {
        Console.WriteLine(e.Message);
    }
}

static float Lerp (int value1, int value2, float lerp)
{
    return (1 - lerp) * value1 + lerp * value2;
}

static float SineEaseOut (int value1, int value2, float lerp)
{
    return Lerp(value1, value2, (float)Math.Sin(lerp * Math.PI / 2));
}

static int Dither1D (float value, int coord)
{
    float remainder = value % 1;
    if (remainder < 0.25 || (remainder < 0.75 && (coord % 2 == 0)))
        return (int)Math.Floor(value);
    return (int)Math.Ceiling(value);
}

正如您所看到的,我确保在保存bmp之前将所有颜色值写入日志中。 它们看起来不错,最后20个值是

(...)  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=228, G=228, B=228]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=228, G=228, B=228]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=228, G=228, B=228]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=228, G=228, B=228]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]  
Color [A=255, R=227, G=227, B=227]

换句话说,有些部分在227和228之间抖动,这就是我想要的。 但是,当我保存文件并在Photoshop中打开它时,它看起来就像那样。这里,最后20个值是

(...)  
228  
228  
228  
228  
227  
228  
228  
228  
227  
227  
227  
227  
227  
227  
227  
227  
227  
227  
227  
227

我只是不明白这里发生了什么。如何让.net正确保存图像?

1 个答案:

答案 0 :(得分:0)

(代表OP发布)

我似乎误解了这种情况。文件已正确保存。我在Photoshop中水平拉伸图像时更容易看到错误。我需要选择&#34;最近邻居&#34;或者像素会被破坏。