2012-03-12 3 views
3

Я новичок в разработке WP7, и я хотел бы знать, как писать текст в изображение?Написать текст на картинке в WP7

Во-первых, это возможно?

Как в GDI можно писать текст изображения, как показано ниже:

Dim pth As New GraphicsPath() 
pth.AddString(txtSample.Text, New FontFamily(DropFont.SelectedValue), 0, Integer.Parse(DropFontSize.SelectedValue), New Point(left, top), StringFormat.GenericTypographic) 

Но в WP7, как я узнал, что GDI не supported.So, как я могу это сделать?

Edit:

Мне нужно, чтобы выбрать изображение из pictures hub или сделать фотографию с помощью camera и отобразить его в графический элемент управления и написать какой-нибудь текст и сохранить обратно с другим именем.

Любые предложения приветствуются.

+0

Вы пытаетесь просто наложить изображение на текст или записать текст на изображение и сохранить его (т. Е. Создать новый Jpeg, который хранится на устройстве и т. Д.) –

+0

@ willmel-Не накладывать Мне нужно написать текст. – coder

+0

http://stackoverflow.com/questions/7481436/drawstring-on-wp7 –

ответ

4

Вам необходимо получить WriteableBitmap, который затем можно манипулировать.

Это можно сделать либо путем добавления UIElement с использованием метода Render, либо вы можете напрямую манипулировать пикселями, используя массив Pixels.

Вы, вероятно, только нужно добавить TextBlock элементов в растровом изображении, но если вам интересно манипуляцией пикселей здесь, как это делается:

У меня есть только опыт работы с манипуляциями пикселей. Это не совсем прямолинейно, но вы получаете доступ к пикселю (x, y) в одномерном массиве, переведя y * width + x.

Значение находится в формате argb32, т.е. значения для альфа-канала (непрозрачность), красного, зеленого и синего. Перевод между регулярным Color и ArgB32 ниже:

int ColorToInt(Color c) 
    { 
     var argb32 = c.A << 24 | c.R << 16 | c.G << 8 | c.B; 
     return argb32; 
    } 

    Color IntToColor(int argb32) 
    { 
     const int mask = 0x000000FF; 
     byte a, r, g, b; 
     a = (byte)((argb32 >> 24) & mask); 
     r = (byte)((argb32 >> 16) & mask); 
     g = (byte)((argb32 >> 8) & mask); 
     b = (byte)(argb32 & mask); 
     return Color.FromArgb(a, r, g, b); 
    } 
2

Почему вам нужно встроенным в изображениях?

Вы можете просто разместить изображение и текст в сетке, такие как:

<grid> 
    <image source="YourImageSource"/> 
    <TextBlock Text="Your Text Here"/> 
</grid> 

Это накладывается изображение с текстом, без необходимости изменять изображение таким образом, вы можете использовать его позже. Он также обеспечивает больше свободы с привязками и т. Д., Поскольку вы можете связывать их с разными вещами и самостоятельно переключаться между ними.

Если вы используете XNA, это также можно сделать, манипулируя пикселями Texture2D так же, как сказал фастер.

+0

@ Runewake2-Я видел этот ответ на SO раньше, но это плохая идея, поскольку я не хочу показывать только текст, и мне нужно сделать некоторые манипуляции, такие как изменение положения текста. Затем дозатор сетки соответствует моей цели. – coder

+0

@DotNetter Если вам нужно изменить положение текста, это можно сделать, установив маркер TextBlock в требуемое смещение (будет относиться к позиции сетки).Это должно дать вам полную свободу текста. Кроме того, если вы хотите переместить текст, вы не хотите использовать другую идею вложения текста в изображение, так как регенерация изображения медленная ... очень медленная. – Runewake2

+0

+1 для простоты. – Robaticus

Смежные вопросы