Android (Advanced) Сохранение растрового холста с DrawText, но требуется вычисление по размеру текста - PullRequest
2 голосов
/ 08 июня 2011

У меня есть холст, на котором я рисую текст.
(это довольно продвинутый, я надеюсь, что вы можете следовать за мной)

См. Прикрепленное изображение ниже.

Функциональность заключается в том, что я могу нажать на экран, чтобы изменить размер текста.
Нажмите левый экран = меньший шрифт.
Нажмите правый экран = больший шрифт.
Затем я также могу переместитьтекст на экране.

Когда с форматированием текста все в порядке, и я переместил текст туда, куда я хочу,
Затем я хочу сохранить его в исходном растровом изображении.

Я использую options.inSampleSize = 4; для первоначальной загрузки Bitmap

ImageView с растровым изображением, конечно, меньше исходного изображения.
Необходим какой-то расчет.Это, как правило, довольно сложно сделать.

У меня есть options.inSampleSize = 4 Коэффициент растровых изображений.
Это 0,59, 0,69 в зависимости от ландшафта или портрета.

Я играю с этим, чтобы как-то изменить новое растровое изображение setTextSize
, чтобы оно выглядело так же, как уменьшенное растровое изображение ImageView.

Что я могу сделать здесь?
У меня естьтакое ощущение, что, поскольку никто никогда не знает, какого размера изображение.
Я должен каким-то образом масштабировать / ограничивать коэффициент загруженной битовой карты фиксированным отношением.

Затем мне нужно использовать процент или что-то для передачи текстарасположение к большему изображению.
Я могу сделать это, когда дело доходит до начального (красный шарик на картинке) местоположения.Отсюда и отправная точка текста.

Но я не знаю, как долго текст так застревает, так что говорите и просите совета

Один из способов, которым я пытался, - это разделить paint.getTextSize() с отношением примерно 0,59.Сначала это выглядело как решение.Но соотношение изображений не фиксировано, а размер шрифта не фиксирован, требуется что-то еще.

Вот две картинки, показывающие проблему.

На растровом изображении телефона:

enter image description here

Сохраненное новое растровое изображение:

enter image description here

1 Ответ

2 голосов
/ 14 июня 2011

Мне не на 100% ясно, что я понимаю, что вы имеете в виду, но здесь дело идет.Похоже, вы были близки к правильному подходу.Вместо того, чтобы использовать фиксированный коэффициент, вам нужно рассчитать коэффициент масштабирования изображения, чтобы он соответствовал представлению на телефоне, затем вы можете масштабировать текст обратно пропорционально.Итак, по шагам:

  • Измерьте ширину исходного изображения (высота будет так же хорошо, но нам нужен только один размер)
  • Измерьте ширину масштабированного изображения
  • Расчетный коэффициент (ratio = original / scaled)
  • Позволяет пользователю печатать свой текст
  • Затем вы можете получить размер текста, используя что-то вроде: float paintSize = paint.getTextSize();
  • Длярендеринг на конечном изображении, используйте paint.setTextSize(paintSize / ratio);.
...