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