0
我有一些代碼創建1 * 1000像素梯度並將其保存爲bmp。.net正在保存我的程序創建的位圖不正確
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正確保存圖像?
如果在代碼中再次打開圖像並打印出像素,它們是否匹配.net或photoshop? – FloatingKiwi
您是否在Photoshop中關閉了該圖像的顏色管理? –
@FloatingKiwi好主意。當我用代碼重新打開文件時,這些值似乎是正確的。但在Photoshop中渲染時,它們是錯誤的... – NounVerber