我有一些代码可以创建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正确保存图像?
答案 0 :(得分:0)
(代表OP发布)。
我似乎误解了这种情况。文件已正确保存。我在Photoshop中水平拉伸图像时更容易看到错误。我需要选择&#34;最近邻居&#34;或者像素会被破坏。