3

Android で非常に細い線 (1 ピクセル未満の太さ) を描画しようとしています。私は使用しています

Paint blackThin = new Paint();
blackThin.setStrokeWidth(0.1f);
blackThin.setColor(Color.BLACK);

ペイント オブジェクトを初期化します。

これは Android 2.2 では正常に動作しますが、4.2 (4.1 も同様だと思います - 簡単にテストしました - 2.2、4.1.2、および 4.2 以外のバージョンはテストしていません) で試してみると、行が表示されません。私がそれらを描くときに現れます。それらを 4.2 で表示するには、アンチエイリアシング フラグを true に設定する必要があるようです。(私はそれを試してみましたが、線が表示されました。)しかし、線などがぼやけるので、私は本当にそれを望んでいません。

これは Android のバグですか?アンチエイリアシングをオンにする以外に、動作させるためにできることはありますか?

編集:これもピクセルサイズ0.9でテストしましたが、問題は同じです。

助けてくれてありがとう!

4

2 に答える 2

3

ドキュメントにあるように、非常に細い線が必要な場合は、を使用しsetStrokeWidth(0)ますPass 0 to stroke in hairline mode.

サブピクセル描画には明らかに、アニタリアシングまたはその他の回避策が必要です。たとえば、ソフトウェア レンダリングでは、1 ピクセル未満の線は常にヘアラインとして描画されますが、ハードウェア レンダリング (Android 4.2 では自動的に使用される可能性がありますが、2.2 では使用されません) では、動作が変化し、便利な機能の多くが失われる可能性があります。(これが、描画の違いや奇妙なグリッチの原因になることがよくあります。)

于 2013-01-01T23:41:28.813 に答える
3

widthアンチエイリアシングなしでは、1 ピクセル未満の線を描くことはできません。

アンチエイリアシングの要点は、要素がピクセルを完全に埋めていない場合 (ピクセルの幅の 10 分の 1 の線など)、ピクセルの色がどうなるかを計算することです。

より明るい線を描くことでいくらかシミュレートできますが、それでも実際にアンチエイリアス処理された線には近づきません。

たとえば、次の画像を見てください。

ここに画像の説明を入力

線の色を変更してアンチエイリアス処理された結果を再現することは実際には不可能です。

この例の線の幅は 1 ピクセルを超えていますが、同じ原則が適用されます。ピクセルの「暗さ」は、ピクセルのどれだけが線で満たされているかの結果として計算されます。そのため、灰色の実線は機能しません。

于 2013-01-02T08:31:38.810 に答える