我有10个System.Drawing.Image
。我需要把它们加到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个映像都正确保存。我的代码中有什么错误?
可能不是问题的答案,但至少下面的代码显示了一个最小的工作示例。它将Sample Pictures文件夹中的所有图像加载到System.Drawing.Bitmap
对象列表中。然后它将所有列表元素转换为ImageSource
,并将每个元素添加到fixeddocument页面。
请不要在图像控件上调用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 });
}