Я пытаюсь сделать текст в растровом изображении в приложении Windows Phone 7.
Код, который выглядит более или менее похожим на следующее, будет работать нормально, когда он работает в основном потоке:
public ImageSource RenderText(string text, double x, double y)
{
var canvas = new Canvas();
var textBlock = new TextBlock { Text = text };
canvas.Children.Add(textBloxk);
Canvas.SetLeft(textBlock, x);
Canvas.SetTop(textBlock, y);
var bitmap = new WriteableBitmap(400, 400);
bitmap.Render(canvas, null);
bitmap.Invalidate();
return bitmap;
}
Теперь, поскольку я должен отображать несколько изображений с более сложными вещами, я хотел бы отобразить растровое изображение на фоновом потоке, чтобы избежать невосприимчивого интерфейса.
Когда я использую BackgroundWorker
для этого, конструктор для TextBlock
выдает UnauthorizedAccessException
, утверждая, что это недопустимый доступ к перекрестным потокам.
Мой вопрос: как я могу визуализировать текст в растровом изображении без блокировки пользовательского интерфейса?
- Пожалуйста, не предлагайте использовать веб-службу для рендеринга. Мне нужно отображать большое количество изображений, а стоимость полосы пропускания не подходит для моих нужд, а способность работать в автономном режиме является основным требованием.
- Решение не обязательно должно использовать
WriteableBitmap
илиUIElements
, если есть другой способ визуализации текста.
ИЗМЕНИТЬ
Другая мысль: кто-нибудь знает, возможно ли запустить цикл сообщений пользовательского интерфейса в другом потоке, а затем запустить этот поток? (вместо использования BackgroundWorker
)?
РЕДАКТИРОВАТЬ 2
Чтобы рассмотреть альтернативы WriteableBitmap
, мне нужны следующие функции:
- Нарисуйте фоновое изображение.
- Измерьте ширину и высоту строки из 1 строки, учитывая шрифт familiy и размер (и предпочтительно стиль). Нет необходимости в переносе слов.
- Нарисуйте строку с 1 строкой с заданным семейством шрифтов, размером, стилем в заданной координате.
- Текстовый рендеринг должен поддерживать прозрачный фон. То есть вы должны увидеть фоновое изображение между символами.