Я бы попробовал использовать среду выполнения WPF для рендеринга XAML и генерирования BMP из этого. Обычно XAML, который работает в Silverlight, будет работать в WPF, хотя обратное не всегда верно.
WPF должен позволять программно создавать экземпляры элементов управления или загружать свободный XAML. Затем вы можете сказать ему обновить макет и, наконец, записать изображение в растровое изображение.
EDIT
Чтобы получить xaml на сервере, я бы порекомендовал вам создать новый проект библиотеки классов WPF в своем решении. Затем «Добавить существующие» элементы в этот проект и выберите, чтобы добавить нужные файлы xaml в качестве «связанного» файла, а не копировать их. Таким образом, вы можете поделиться одним файлом между проектами silverlight и wpf.
Скомпилируйте эту DLL и используйте ее на сервере в службе или на странице, которая будет возвращать вывод изображения. На этой странице создайте экземпляр пользовательского элемента управления, задайте текстовый текст данных и выведите изображение. Для захвата изображения из визуала вы можете использовать RenderTargetBitmap.
Вот фрагмент:
var arrangeSize = new Size(300, 300);
var arrangeRect = new Rect(new Point(0, 0), arrangeSize);
var control = new MyControl();
control.DataContext = new MyViewModel();
control.Measure(arrangeSize);
control.Arrange(arrangeRect);
control.InvalidateVisual();
control.UpdateLayout();
RenderTargetBitmap renderTarget =
new RenderTargetBitmap(
arrangeSize.X,
arrangeSize.Y,
96,
96,
System.Windows.Media.PixelFormats.Default
);
renderTarget.Render(control);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderTarget));
using (var pageOutStream = new FileStream(targetSavePath + ".png", FileMode.Create, FileAccess.Write))
{
encoder.Save(pageOutStream);
pageOutStream.Close();
}