2012-03-09 25 views
1

以及即時通訊渲染相同的路徑2次一次用黑色背景上的白色畫筆和一個用白色背景上的黑色畫筆。當顏色倒置時,相同的路徑呈現不同的大小?

現在的結果應該是相同的圖像,但倒轉的權利?

好錯那對黑色背景繪製的一個是幾個像素大..

enter image description here enter image description here

DIFF

enter image description here

代碼,我用來繪製這些

PointF[] points = LoadXml<PointF[]>(@"T:\Points.xml"); 
byte[] types = LoadXml<byte[]>(@"T:\Types.xml"); 
GraphicsPath path = new GraphicsPath(points, types, FillMode.Alternate); 
using (Image image = new Bitmap(45, 45)) 
{ 
    using (Graphics g = Graphics.FromImage(image)) 
    { 
     Render(g, Color.White, Color.Black, path); 
    } 
    image.Save(@"T:\White.bmp", ImageFormat.Bmp); 
} 
using (Image image = new Bitmap(45, 45)) 
{ 
    using (Graphics g = Graphics.FromImage(image)) 
    { 
     Render(g, Color.Black, Color.White, path); 
    } 
    image.Save(@"T:\Black.bmp", ImageFormat.Bmp); 
} 

private static T LoadXml<T>(string file) 
{ 
    System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(T)); 
    using (Stream stream = File.OpenRead(file)) 
    { 
     return (T)xmlSerializer.Deserialize(stream); 
    } 
} 

private static void Render(Graphics g, Color mainColor, Color backColor, GraphicsPath graphicsPath) 
{ 
    g.CompositingQuality = CompositingQuality.HighQuality; 
    g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
    g.SmoothingMode = SmoothingMode.HighQuality; 
    g.InterpolationMode = InterpolationMode.HighQualityBilinear; 

    g.Clear(backColor); 
    using (SolidBrush mainBrush = new SolidBrush(mainColor)) 
    { 
     g.FillPath(mainBrush, graphicsPath); 
    } 
} 

有沒有什麼辦法讓他們呈現相同的方式而不修改路徑?

+1

你確定它不只是一個錯覺嗎?看起來和我一樣。 – asawyer 2012-03-09 19:42:32

+0

看看正方形之間的空間,我甚至用一個比較工具來驗證它。添加了一個顯示此差異的圖像。 – Peter 2012-03-09 20:09:44

+0

關閉過濾器併發布圖片 – asawyer 2012-03-09 20:18:52

回答

2

Atmittedly,我只是猜測,但:

這可能是GDI的結果+試圖做伽瑪校正的渲染。 (我沒有檢查它是否)。

從歷史上看,顯示器是非線性的。因此,灰度值爲255的像素比具有值128的像素明亮多了一倍。因此,如果您嘗試對一行進行反鋸齒,並且想要繪製50%覆蓋白色的像素,值爲128的像素太暗。它更像是25%的白色。要獲得50%的白色像素,您應該獲得180左右的值(我不太清楚)。

如果將其與逆相比較,會使白色圖像比黑色圖像大半個像素。

+0

爲了記錄,CompositingQuality控制伽馬校正,所以這個答案證明是正確的。 – 2012-03-10 04:07:01

相關問題