2

スケーリングされた画像に関連していくつかの描画を行っているため、最終的には CGPoints が分数になります。CoreImage の顔検出ルーチンの結果をスケーリングしています。

CGPathAddLineToPoint通話でこれらのポイントを使用する場合、これらを自分で丸めますか、それとも iOS に任せますか? 四捨五入したほうがよい場合、四捨五入するか、四捨五入するか。

ピクセル境界などについて読んだことがありますが、ここでそれを適用する方法がわかりません。私はに描いていますCALayer

CGPoint leftEye = CGPointMake((leftEyePosition.x * xScale), 
                              (leftEyePosition.y * yScale));

// 結果

features {
    faceRect = "{{92, 144.469}, {166.667, 179.688}}";
    hasLeftEyePosition = 1;
    hasMouthPosition = 1;
    hasRightEyePosition = 1;
    leftEyePosition = "{142.667, 268.812}";
    mouthPosition = "{176, 189.75}";
    rightEyePosition = "{207.333, 269.531}";
}
4

1 に答える 1

12

丸めるかどうか、およびどの方向に丸めるかは、達成しようとしている効果によって異なります。

CoreGraphics 自体は、分数座標にまったく問題はありません。ただし、分数座標を使用して何かを描画すると、描画されたオブジェクトのアンチエイリアシングが発生します。これにより、通常、ぼやけて見えます。これを避けるには、座標を適切に丸めることをお勧めします。

ただし、注意してください。何をどのように描画しているかによっては、整数座標ではなく 0.5 ピクセル離れた座標が必要になる場合があります。たとえば、線を描いている場合、その線は指定した座標を中心に配置されます。したがって、整数座標に描かれた 1 ピクセルの線は、実際には 2 ピクセル幅のぼやけた線になります (各ピクセルが線の半分を占めます)。覚えておくべき最も簡単なことは、ストロークは座標を中心にしていますが、塗りつぶしはそれらによって境界付けられているということです。したがって、長方形を塗りつぶすときは、整数座標が最適です。四角形をストロークするときは、座標を 0.5 ピクセル (または、使用するストローク幅の半分) 挿入します。

また、スケール = 2 の Retina 画面に表示されるイメージを描画する場合、0.5 単位ずれている座標は実際にはまだピクセル境界上にあることを忘れないでください。したがって、網膜であることがわかっている場合は、最も近い半単位座標が問題ない場合に、完全に整数の座標への丸めを回避できます。

于 2013-01-21T23:53:10.023 に答える