2016-09-24 18 views
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正確保存圖像?

+0

如果在代碼中再次打開圖像並打印出像素,它們是否匹配.net或photoshop? – FloatingKiwi

+0

您是否在Photoshop中關閉了該圖像的顏色管理? –

+0

@FloatingKiwi好主意。當我用代碼重新打開文件時,這些值似乎是正確的。但在Photoshop中渲染時,它們是錯誤的... – NounVerber

回答

0

(發表於OP)

看來我誤解了這種情況。該文件被正確保存。當我在Photoshop中水平拉伸圖像以使其更易於看清時發生錯誤。我需要選擇「最近的鄰居」或像素將被損壞。