Нежелательный эффект, который рисует текст на пути к андроиду

Я делаю несколько тестов на рисование текста на пути. Я сделал фоновую картинку, установив растровое изображение на холст. Затем я рисую текст на пути к холсту, повернутому на матрицу. Я должен сократить код, я опубликую только важную часть, потому что она слишком длинная. Эти изображения, показанные ниже, обрезаны с позолотой, поэтому не раздражайтесь от разных размеров. Мои объекты 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); 

До этого момента все выглядит нормально

enter image description here

Но после сохранения всего экрана повернутый текст выглядит искривленным на сохраненном .png изображении. Все остальные компоненты выглядят хорошо. Я сделал несколько других рисунков с текстом, линейным или угловым, все это работает. Даже некоторые растровые изображения .png, рисующие на холст и фоновое изображение... все выглядят нормально. Но нарисованный текст по кругу выглядит так:

enter image description here

Я не делаю масштабирование на растровом изображении, просто сохраняю изображение холста с помощью:

    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 или отключение аппаратного ускорения в Manifest покажет эффект во время выполнения перед сохранением. Это говорит мне о том, что при сохранении растрового изображения с помощью getDrawingCache(), в настоящее время масштабирование отключено. Но почему?

Последнее, что я обнаружил, - чем меньше кривизна, тем меньше масштабирование текста. Если текст немного изогнут, это кажется хорошим.

enter image description here

Ответы

Ответ 1

Я попытался бы установить

this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

перед рисованием на экран, поскольку более низкое качество может означать более простое преобразование текста. Конечно, это просто угадывание. В настоящее время вы устанавливаете только высокое качество перед записью на диск. Или просто удалите его из метода write to disk, чтобы проверить, влияет ли это на способ рисования текста.