最近の iOS テックトークで、「描画操作がピクセル単位で整列されていることを確認してください」という提案を聞きました。
これは Mac/iOS の描画パフォーマンスに対する有効な提案ですか?
もう 1 つの質問は、自分のコードがピクセル アラインメントで描画されていることをどのように判断できるかということです。
役立つツールやトリックはありますか?
最近の iOS テックトークで、「描画操作がピクセル単位で整列されていることを確認してください」という提案を聞きました。
これは Mac/iOS の描画パフォーマンスに対する有効な提案ですか?
もう 1 つの質問は、自分のコードがピクセル アラインメントで描画されていることをどのように判断できるかということです。
役立つツールやトリックはありますか?
ピクセルの位置合わせは、パフォーマンスとは関係ありませんが、レンダリングされたグラフィックスの品質とは関係ありません。
それを説明する最善の方法は、少しのコードを示すことです:
//Assume this is drawing in a rect such as a button or other NSView
NSBezierPath *line = [NSBezierPath bezierPath];
[line moveToPoint:NSMakePoint(0,0)];
[line lineToPoint:NSMakePoint(200,0)];
[[NSColor redColor] set];
[line stroke];
このコードを試すと、赤い線が表示されます。よく見ると、線はあまりシャープではありません。赤が白っぽくなり、幅が約 2 ピクセルのように見えます。これは、Cocoa での描画がピクセルではなくポイントを使用するためです。その結果、2 つのピクセル間に線が引かれます。(詳細については、ドキュメントのココア描画ガイドをお読みください。)
ここで、いくつかの簡単な変更を加えると...
//Assume this is drawing in a rect such as a button or other NSView
NSBezierPath *line = [NSBezierPath bezierPath];
[line moveToPoint:NSMakePoint(0,0.5)];
[line lineToPoint:NSMakePoint(200,0.5)];
[[NSColor redColor] set];
[line stroke];
このコードを実行すると、おそらく最初に意図した出力が表示されます。
これについて言えることはたくさんありますが、基本的にポイントを 0.5 オフセットすれば問題ありません。
OS X 10.7+ ではbackingAlignedRect:options:
、" ..バッキング ストア ピクセルで整列された四角形をウィンドウ座標で生成するためにも使用する必要があります。 ".