#c# #wpf #image #fixeddocument
#c# #wpf #изображение #исправленный документ
Вопрос:
У меня 10 System.Drawing.Image
. Мне нужно добавить их в a FixedDocument
. Я попробовал приведенный ниже код, и фиксированный документ, содержащий все 10 страниц, состоит только из первого изображения.
FixedDocument doc = new FixedDocument();
BitmapSource[] bmaps = new BitmapSource[10];
System.Drawing.Image[] drawingimages = //I have System.Drawing.Image in a array
for (int i = 0; i < 10; i )
{
Page currentPage = this.Pages[i];
System.Drawing.Image im = drawingimages[i];
im.Save(i ".png");
Stream ms = new MemoryStream();
im.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
var decoder = BitmapDecoder.Create(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnDemand);
ImageSource imgsource = decoder.Frames[0];
bmaps[i] = imgsource as BitmapSource;
}
foreach (BitmapSource b in bmaps)
{
PageContent page = new PageContent();
FixedPage fixedPage = CreateOneFixedPage(b);
((IAddChild)page).AddChild(fixedPage);
doc.Pages.Add(page);
}
Метод для CreateOneFixedPage
private FixedPage CreateOneFixedPage(BitmapSource img)
{
FixedPage f = new FixedPage();
Image anImage = new Image();
anImage.BeginInit();
anImage.Source = img;
anImage.EndInit();
f.Children.Add(anImage);
return f;
}
Когда я пытаюсь сохранить System.Drawing.Image
на локальный диск, все 10 изображений сохраняются правильно.
В чем ошибка в моем коде здесь?
Комментарии:
1. Что произойдет, если вы измените BitmapCacheOption на
BitmapCacheOption.OnLoad
в BitmapDecoder. Создать()?2. И нет необходимости вызывать BeginInit() и EndInit() для элемента управления изображением.
3. @Clemens: пробовал оба,,,, но проблема все еще сохраняется
Ответ №1:
Возможно, это не ответ на вопрос, но, по крайней мере, приведенный ниже код показывает минимальный рабочий пример. Он загружает все изображения из папки Sample Pictures в список System.Drawing.Bitmap
объектов. Затем он преобразует все элементы списка в ImageSource
и добавляет каждый на страницу FixedDocment.
Пожалуйста, не то, что он не вызывает BeginInit()
и EndInit()
на элементах управления изображением. Также он устанавливает свойство PageContent Child
вместо вызова IAddChild.AddChild()
.
var bitmaps = new List<System.Drawing.Bitmap>();
foreach (var file in Directory.EnumerateFiles(
@"C:UsersPublicPicturesSample Pictures", "*.jpg"))
{
bitmaps.Add(new System.Drawing.Bitmap(file));
}
foreach (var bitmap in bitmaps)
{
ImageSource imageSource;
using (var stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Position = 0;
imageSource = BitmapFrame.Create(stream,
BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
var page = new FixedPage();
page.Children.Add(new Image { Source = imageSource });
doc.Pages.Add(new PageContent { Child = page });
}
Комментарии:
1. спасибо @Clemens… это тоже не позволяет рисовать все изображения. просто нарисуйте только первую страницу 10 раз