Можно ли преобразовать текстовые поля в BitmapImage или BitmapFrame? - PullRequest
0 голосов
/ 06 января 2012

У меня есть холст с растровым изображением документа и несколькими текстовыми полями в разных местах. Текстовые поля существуют, чтобы блокировать текст позади него, но также могут содержать текст сверху (представьте, что вы блокируете текст в конфиденциальном документе). Все это необходимо сохранить в виде файла TIFF.

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

//The document bitmap is the first item in the canvas
foreach (Control redaction in canvas.Children)
{
    Size sizeOfControl = new Size(redaction.Width, redaction.Height);
    renderBitmap = new RenderTargetBitmap((Int32)sizeOfControl.Width, (Int32)sizeOfControl.Height, 96d, 96d, PixelFormats.Pbgra32);
    renderBitmap.Render(redaction);
    tiffEncoder.Frames.Add(BitmapFrame.Create(frame));
}
FileStream fs = new FileStream(outputFileName, FileMode.Create);
tiffEncoder.Save(fs);
fs.Flush();
fs.Close();

Когда я не добавляю растровое изображение документа в tiffEncoder, он сохраняет черное изображение, которое говорит мне, что оно не преобразует текстовые поля правильно (или, по крайней мере, так, как я этого хочу).

Так это вообще возможно?

1 Ответ

0 голосов
/ 06 января 2012

Почему вы визуализируете каждый элемент управления отдельно? Также вы не используете renderBitmap, а frame для добавления в кодировщик (не знаю, откуда это). Это должно сделать холст и все элементы управления на нем:

var bm = new RenderTargetBitmap((int)canvas.Width, (int)canvas.Height,
                                96d, 96d, PixelFormats.Pbgra32);
tiffEncoder.Frames.Add(BitmapFrame.Create(bm));

using (var fs = new FileStream(outputFileName, FileMode.Create))
{
    tiffEncoder.Save(fs);
}

Также обратите внимание, что холст должен быть видимым (поэтому окно не должно быть свернуто), иначе WPF не потрудится отобразить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...