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

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

Почему текст выглядит искаженным? Кто-нибудь видит мою ошибку? Заранее спасибо….

РЕДАКТИРОВАТЬ

Я попробовал кое-что и выяснил, что установка anyDensity в false или отключает аппаратное ускорение в Manifest покажет эффект во время выполнения перед сохранением. Это подсказывает мне, что при сохранении растрового изображения с getDrawingCache () масштабирование отключается в это время. Но почему?

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

Введите описание изображения здесь

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

 this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 

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