2012-01-31 18 views
3

ios用のUIViewで長方形を描画する際、同じ問題が発生します。四角形の余白は、背景と色を混ぜます。私は同じ結果を持ついくつかの矩形描画メソッドを試してみました - ベジェパスを使って、行ごとに描画し、余白を描き、矩形の内側を塗りつぶしました。四角形を描いている間にカラーブレンドを避けるにはどうすればいいですか?

ビューのフレーム自体は常に正しく描画されます。私は四角形が必要なときはいつでもビューを使うことを考えましたが、それは私がそれらの多くを描く必要があるので、特殊なことを行う正しい方法のようには見えません。

これは私の問題の例です。比較のために、私は、同じ寸法の矩形のグリーンビューを描画しています:

CGRect horizontalBar = CGRectMake(2, 2, 10, 6); 

UIView* horizontalBarSubView = [[UIView alloc] initWithFrame:horizontalBar]; 
horizontalBarSubView.backgroundColor = [UIColor greenColor]; 
[self addSubview:horizontalBarSubView]; 
[horizontalBarSubView release]; 

矩形自体の:

CGRect horizontalBar = CGRectMake(2, 20, 10, 6); 

UIBezierPath* horizontalBarPath = [UIBezierPath bezierPathWithRect:horizontalBar]; 
[[UIColor greenColor] set]; 
[horizontalBarPath fill]; 

これは、以下の結果(10倍ズーム)を振るいます10x zoom rectangle test

どのような色が混ざっていますか?

どうすればこの問題を回避できますか?

答えて

2

@Almoはあなたの問題がアンチエイリアス処理であることは間違いありませんが、これが実際のコードと値であることを確認してください。これはアンチエイリアスではないはずですが、私のテストはそうではないことを示しています。あなたの結果を得るために、私はこれまで、あなたのパスを変更する必要があります。

CGRect horizontalBar = CGRectMake(2.5, 20.5, 10, 6); 

端数ピクセル上のパスに充填あなたが見ている効果が得られます。また、奇数の幅を持つ整数ピクセル上のパスを描くことは、このようにアンチエイリアスを行います。 (網膜以外のディスプレイではすべて、網膜は少し異なります)。

@Almoの示唆しているように、アンチエイリアスをオフにすることはお勧めできません。代わりに、パスがピクセル全体を描画または塗りつぶすことを確認するだけです。

これは、iOS 5 Programming Pushing the Limitsの第6章で詳しく説明され、ページ114

+0

あなたは正しく、両方の軸で既に半ピクセルオフに設定されているビューの中に描画していました。 – rahzark

2

あなたはCGContextを使いこなそうとしましたか?

CGContextSetShouldAntialiasここでグラフィックスコンテキストの設定で

ルック:。

http://www.apeth.com/iOSBook/ch15.html

を「あなたはグラフィックスコンテキストに描画すると、描画コンテキストの現在の設定に従うこのように、手順が設定することは常にありますコンテキストの設定を最初に行い、次に描画します。

CGContextSetShouldAntialiasフラグが設定されていないコンテキストが必要です。

コメントに記載されているように、そうでなければ矩形の色とブレンドされるピクセルを埋めるでしょう。

+0

これは実際に作業を行い、矩形がそれら(長方形)が厚くなるブレンドピクセルを充填終わるありません。 – rahzark

+0

興味深い。情報をありがとう! – Almo

関連する問題