19

パス上のテキストの描画についていくつかのテストを行います。キャンバスにビットマップを設定して背景画を作りました。次に、canvas へのパスにテキストを描画し、マトリックスで回転させます。コードを短くしなければならないので、長すぎるので重要な部分だけ掲載します。以下に示すこの画像は gimp でトリミングされているため、サイズの違いに悩まされないでください。私の Rect、Path、Matrix オブジェクト:

    RectF drawTextOval;
    Path drawTextPath;
    Matrix mDrawnMatrix;

今、これは円のパスにテキストを描画するために私がやっていることです:

    drawTextOval.set(drawTextPosX - drawTextArc, drawTextPosY
                    - drawTextArc, drawTextPosX + drawTextArc, drawTextPosY
                    + drawTextArc);
            drawTextPath.addArc(drawTextOval, 0, 360);

            drawTextPath.computeBounds(drawTextOval, true);
            mDrawnMatrix.postRotate(drawTextArcStart,
                    (drawTextOval.right + drawTextOval.left) / 2,
                    (drawTextOval.bottom + drawTextOval.top) / 2);
            drawTextPath.transform(mDrawnMatrix);

            patternCanvas.drawTextOnPath(drawText, drawTextPath, 0, 0,
                    mFixedTextPaint); 

この時点までは、すべて問題ないように見えます。

ここに画像の説明を入力

しかし、画面全体を保存した後、回転したテキストは保存された .png 画像で歪んで見えます。他のすべてのコンポーネントは良さそうです。線形または角度のあるテキストを使用して、他の図面をいくつか作成しましたが、これはすべて機能します。キャンバスと背景画像に描画するいくつかの .png ビットマップでさえ...すべて正常に見えます。ただし、円パス上に描画されたテキストは次のようになります。

ここに画像の説明を入力

ビットマップのスケーリングは行わず、キャンバス イメージを次のように保存するだけです。

    FileOutputStream fos = new FileOutputStream(saveFile);
        this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
        Bitmap bitmap = this.getDrawingCache();


        bitmap.compress(CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();

テキストがゆがんで見えるのはなぜですか? 誰かが私の間違いを見ますか?前もって感謝します...

編集

いくつか試してみたところ、密度をfalseに設定するか、マニフェストでハードウェアアクセラレーションを無効にすると、保存する前に実行時に効果が表示されることがわかりました。これは、ビットマップを getDrawingCache() で保存すると、現時点ではスケーリングが無効になっていることを示唆しています。しかし、なぜ?

私が最後に見つけたのは、曲率が低いほどテキストのスケーリングが低いということです。文字が少しだけ曲がっていれば良さそうです。

ここに画像の説明を入力

4

1 に答える 1

1

私は設定しようとします

this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

画面に描画する前に、品質が低いほどテキストの変換が単純になる可能性があるためです。もちろん、これは単なる推測です。現在、ディスクに書き込む前に高品質を設定するだけです。または、ディスクへの書き込み方法から単純に削除して、テキストの描画方法に影響するかどうかを確認します。

于 2013-06-17T16:19:41.953 に答える