Вам необходимо получить 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);
}