主にボタンのアイコンなど、いくつかの UI 要素を Cocoa で描画しようとしていますが、必要な精度を得るのが非常に困難です。
長方形を描画するために、次のような非常に単純なコードを使用しています。
[[NSColor redColor] set];
[NSBezierPath strokeRect:myRect];
しかし、私が見ているのは、赤い長方形の線が常に薄くなっていることです。
ここで何が欠けていますか?
主にボタンのアイコンなど、いくつかの UI 要素を Cocoa で描画しようとしていますが、必要な精度を得るのが非常に困難です。
長方形を描画するために、次のような非常に単純なコードを使用しています。
[[NSColor redColor] set];
[NSBezierPath strokeRect:myRect];
しかし、私が見ているのは、赤い長方形の線が常に薄くなっていることです。
ここで何が欠けていますか?
Cocoa 座標は、実際に描画するピクセルの中心を指定します。これは、たとえば、左下のピクセルに描画する場合は、座標 (0.5,0.5) を使用する必要があることを意味します。
座標に半ピクセルを加算/減算すると、ピクセルパーフェクトになるはずです。
次のように、グラフィック コンテキストのアンチエイリアシングを無効にすることができます。
[[NSGraphicsContext currentContext] setShouldAntialias:NO];
または、ベジエ パスの代わりに NSFrameRect を使用することもできます。これにより、アンチエイリアシングをオンにしたまま、必要な精度が得られます。
NSFrameRect(myRect);