Как нарисовать строку для растрового изображения в Silverlight? - PullRequest
5 голосов
/ 10 февраля 2010

В обычном C # легко нарисовать растровое изображение с помощью метода Grpahics.DrawString (). Silverlight, похоже, покончил с растровыми объектами, и графика больше не доступна. Итак ... Как я должен манипулировать / создавать растровые изображения при использовании Silverlight? Если это помогает, я использую Silverlight 3.

Позвольте мне рассказать вам, что я делаю. Мне дают шаблон, в основном предварительно отрендеренное изображение. Затем пользователь может выбрать из нескольких изображений и ввести нужный текст. Затем я отрисовываю его на изображение, регулируя размер и т. Д. В пределах границ и центрируя его в заранее определенной области изображения. Если я могу вычислить размер (как в методе MeasureString), а затем нарисовать строку (как в методе Graphics.DrawString), то все будет в порядке. Реальный вопрос, независимо от того, почему я хочу это сделать, можно ли это сделать?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2010

Следующее может работать, немного туманно, потому что я еще не пробовал сам.

Объект, который вы ищете, это WritableBitmap.

Вы создаете визуальное дерево, например, создаете себе Grid или Canvas (вы не добавляете это в пользовательский интерфейс). Добавьте к нему выбранное изображение и текстовый блок, расположенный и подобранный по вашему усмотрению.

Создайте новый WritableBitmap либо определенного размера, либо используйте выбранное изображение для его инициализации.

Используйте метод WritableBitmap Render, передавая вышеупомянутый корень Grid или Canvas.

Теперь у вас есть растровое изображение, которое вы должны использовать для выполнения всего, что вам нужно, для чего прежде всего требовался весь этот прыжок.

3 голосов
/ 10 февраля 2010

Вопрос в том, почему вы хотите? Почему бы просто не использовать TextBlock ?

Если вы пытаетесь динамически генерировать изображение, используйте стандартные элементы управления Silverlight / WPF (включая TextBlock) и визуализируйте их в WritableBitmap .

Edit:

Хорошо, вы обновили и расширили, что дает мне больше информации. К сожалению, вам не понравится ответ. Во-первых, имейте в виду, что Silverlight и WPF в целом основаны на векторах и предназначены для использования как таковые. Хотя Canvas позволяет вам выполнять псевдопиксельные манипуляции, вы не можете быть настолько точными, как GDI старой школы. Это фактор вашей среды. Если вам абсолютно необходимо измерить вещи так, как вы хотите их измерить, я предлагаю вам создать свои изображения на удаленном сервере и передать их в приложение Silverlight.

Вы можете рассчитать размер текста на экране, отображаемого с помощью TextBlock, используя свойства ActualWidth и ActualHeight. Но это работает только на уже обработанном элементе управления. Что-то вроде MeasureString просто не доступно в Silverlight. Исходя из вашего описания вашего приложения, некоторое взаимодействие с пользователем может выполнить то, что вы хотите. Пользователь выбирает изображение, вводит текст и показывает предварительный просмотр. Затем пользователь может регулировать ширину и высоту различных текстовых областей до тех пор, пока они не будут выполнены, и в этот момент вы можете сделать снимок, используя метод визуализации, который мне понравился выше.

...