Написать текст на изображении в 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 не поддерживается. Так как я могу это сделать?
Редактировать:
Мне нужно выбрать изображение из pictures hub
или сделать снимок, используя camera
и отобразить его в элементе управления изображением и написать текст и сохранить обратно с другим именем.
Любые предложения приветствуются.
2 ответа
Вам необходимо получить 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);
}
Зачем они вам нужны в изображении?
Вы можете просто поместить свое изображение и текст в сетку, например:
<grid>
<image source="YourImageSource"/>
<TextBlock Text="Your Text Here"/>
</grid>
Это наложит ваше изображение на текст без необходимости изменять изображение, чтобы вы могли использовать его позже. Это также дает больше свободы с привязками и т. Д., Так как вы можете связывать как разные вещи, так и самостоятельно включать и выключать их.
Если вы используете XNA, это также можно сделать, манипулируя пикселями Texture2D так же, как сказал Фейстер.