Intereting Posts
Является ли функция автономной диктовки в Jelly Bean частью AOSP, и если да, то в каком пакете она находится? Размер логотипа панели действий? Android. Повторно запускайте поток в течение таймера. Ошибка Android studio 2.0: никаких изменений в развертывании GestureDetector и GestureDetectorCompat 400 Bad Request в аутентификации Yahoo Как отобразить индикаторный пузырь поверх изображения? Пользовательский текстовый просмотр с поворотом, масштабированием, уменьшением масштаба и перемещением по прикосновению в андроиде? Скриншот андроидной медиафотографии содержит черную рамку Есть ли причина использовать Google GCM против обмена сообщениями Apple для push-уведомлений? Интерфейс входа в facebook исчезает вскоре после загрузки Уведомление об андроиде не вызывает запуск BroadcastReceiver onReceive Place Picker Автоматически закрывается после запуска Синхронизированный метод Java Загружать активность и / или логотип приложения программно из манифеста

Нежелательный эффект 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 () масштабирование отключается в это время. Но почему?

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

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

Solutions Collecting From Web of "Нежелательный эффект Warp для рисования текста на пути к андроиду"

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

 this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 

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