2014-06-23 21 views
4

我有10 System.Drawing.Image。我需要将它们添加到FixedDocument。我尝试了下面的代码,并且固定的文档被处理,所有10个页面只包含第一个图像。对于CreateOneFixedPage将System.Drawing.Image添加到FixedDocument

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到本地磁盘

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); 
} 

方法,所有的10张图像的正确保存。 我的代码在这里有什么错误?

+0

如果在BitmapDecoder.Create()中将BitmapCacheOption更改为BitmapCacheOption.OnLoad,会发生什么? – Clemens

+0

而不需要在Image控件上调用BeginInit()和EndInit()。 – Clemens

+0

@Clemens:尝试了两种,,,,但仍然存在问题持续 –

回答

3

也许不是问题的答案,但至少下面的代码显示了一个最小的工作示例。它将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:\Users\Public\Pictures\Sample 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 }); 
} 
+0

谢谢@Clemens ...这也无法绘制所有的图像。只画10次第一页 –

相关问题