0

画像表面にcairoを介していくつかのランダムな長方形を描画し、スケーリングと翻訳を行い、結果を次を使用して表示しています

unsigned char* data = cairo_image_surface_get_data(surface);

しかし、長方形がぼやけているようです:( スクリーンショットを投稿できませんでした)

コーナーは (おそらく) 整数座標にマップされていません。含まれているテクスチャdataは と同じサイズと形式で、surface既にアンチエイリアシングの設定で遊んでいます (テキスト表示はさらにぼやけています!!)。結果の形状を整数座標にマッピングし、品質を向上させるにはどうすればよいですか (スーパーサンプリングを使用せず、スケーリング変換をドロップせずに)?

編集: 以下のコードを使用しました (3 行目あり、なし) が機能しませんでした!:

cairo_save(cr);    
cairo_identity_matrix(cr);
cairo_translate(cr, 0.5, 0.5);
cairo_scale(cr, size.width, size.height);
cairo_set_antialias(cr, CAIRO_ANTIALIAS_GOOD);
(make the drawing!!)
cairo_restore(cr);

Edit2:スナップの楽しみを使用しました。(すべての変換コードの後)、それも機能しませんでした:

double szero1 = zero,szero2 = zero, sone1 = one, sone2 = one;
snapToPixel(cr, &szero1, &szero2);
snapToPixel(cr, &sone1, &sone2);
cairo_rectangle (cr, szero1, szero2, sone1, sone2);
4

3 に答える 3

0

座標を前処理しないと、最も近い整数ピクセル座標に cairo を強制的にスナップさせる方法はありません。

void snapToPixel(cairo_t *cr, float *x, float *y) {
     cairo_user_to_device (cr, x, y);
     *x = round(*x);
     *y = round(*y);
     cairo_device_to_user (cr, x, y);
}

ストローク幅にも同じ問題があります (+ x, yifで異なりますwidth != height)。

詳細については、http://cairographics.org/FAQ/#sharp_linesをご覧ください。

于 2014-05-18T19:27:58.013 に答える