1

他の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");

それは私に白紙を与えます。他のUIElement(TextBox、Grid、Rectなど)は問題なく表示されるので、なぜだろうと思います。私は何が欠けていますか?

ありがとう!

PS OK、別の解決策を見つけました。理由はわかりませんが、そのウリで画像が正しく読み込まれます

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

2 に答える 2

2

私のコードをより明確にするために

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);
于 2012-08-07T20:17:00.627 に答える
0

まず、それを提案したいと思います。以下を参照してください。

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としてurページに追加できます。それが役に立てば幸い。

于 2012-08-07T20:13:32.703 に答える