簡體   English   中英

在WPF中將圖像添加到FixedPage

[英]Adding Image to FixedPage in WPF

我希望能夠用其他UIElements打印圖像。 我有一個FixedPage實例,並試圖像這樣添加圖像

// Basic printing stuff
var printDialog = new PrintDialog();
var fixedDocument = new FixedDocument();
fixedDocument.DocumentPaginator.PageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);

FixedPage page = new FixedPage();
page.Width = fixedDocument.DocumentPaginator.PageSize.Width;
page.Height = fixedDocument.DocumentPaginator.PageSize.Height;

Image img = new Image();

// PrintIt my project's name, Img folder
var uriImageSource = new Uri(@"/PrintIt;component/Img/Stuff.png", UriKind.RelativeOrAbsolute);
img.Source = new BitmapImage(uriImageSource);
img.Width = 100;
img.Height = 100;

page.Children.Add(img);

PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(page);

fixedDocument.Pages.Add(pageContent);

// Print me an image please!
_printDialog.PrintDocument(fixedDocument.DocumentPaginator, "Print");

它給了我一張白紙。 我想知道為什么,因為其他UIElements(如TextBox,Grid,Rect)出現沒有問題。 我錯過了什么?

謝謝!

PS好的,我找到了另一個解決方案。 我不知道為什么但是Uri的圖片加載得當

var uri = new Uri("pack://application:,,,/Img/Stuff.png");

更清楚我的准則

var bitImage = new BitmapImage();
bitImage.BeginInit();
bitImage.StreamSource = new FileStream(fileName, FileMode.Open, FileAccess.Read);
bitImage.DecodePixelWidth = 250;
bitImage.CacheOption = BitmapCacheOption.OnLoad;
bitImage.CreateOptions = BitmapCreateOptions.IgnoreColorProfile;
bitImage.EndInit();
bitImage.StreamSource.Seek(0, System.IO.SeekOrigin.Begin);
bitImage.Freeze();

var tempImage = new Image {Source = bitImage};
var imageObject = new ImageObject(tempImage, fileName);
bitImage.StreamSource.Dispose();
page.Children.Add(imageObject);

首先我想建議,見下文。

Set the sourceStream of the Image for BitMap
    bitImage.StreamSource = new FileStream(fileName, FileMode.Open, FileAccess.Read);

然后凍結BitMap圖像,或者它不會在實例中作為渲染能力圖像。

bitImage.StreamSource.Seek(0, System.IO.SeekOrigin.Begin);
bitImage.Freeze();

這應該工作,如果不是我個人認為直接使用BitMaps是一個壞主意,我使用Bitmap創建圖像表單文件然后將其復制到Image(system.drawing iguess)類型,如下所示

var tempImage = new Image {Source = bitImage};
var imageObject = new ImageObject(tempImage, fileName);
bitImage.StreamSource.Dispose();

這個tempImage可以作為常規UIElement添加到你的頁面。 希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM