2012-03-09 6 views
1

よく、同じパスを2回、黒い背景に白いブラシ、白い背景に黒いブラシでレンダリングします。色が反転すると、同じパスが異なるサイズにレンダリングされますか?

結果は同じ画像でなければなりませんが、逆さまですか?私はこれらの

を描画するために使用

まあ間違った黒の背景に描かれています1が数ピクセル大きくなっ..です

enter image description here enter image description here

差分

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

+0

四角形の間のスペースを見て、それを検証するために比較ツールを使用したこともあります。この差分を示すもう1つの画像を追加しました。 – Peter

+0

フィルタをオフにして画像を投稿してください – asawyer

答えて

2

Atmittedly、私は推測しますが、午前:

それはガンマ正しいレンダリングを実行しようとすると、GDI +の結果である可能性があります。 (私はそれがしていることを確認していない)。

従来、ディスプレイモニタは非線形です。 255のグレースケール値を持つピクセルは、128の値を持つピクセルの2倍以上の明るさです。したがって、ラインのアンチエイリアスを行い、白で覆われたピクセルを描画する場合は、値128のピクセルは暗すぎます。それは25%の白に似ています。 50%の白のピクセルを得るには、180(私は正確に覚えていない)の周りの値を取る必要があります。

これは、白い画像を反転した画像と比較すると、白い画像が黒い画像の半分よりも大きくなる原因になります。

+0

レコードの場合、CompositingQualityはガンマ補正を制御するので、この回答は正しいと判明しました。 –

関連する問題