C#wpf 3D visual studio 2010 net 4.5
您好
我正在尝试打印出我创建的3D图像,但无法正确使用。 打印的图像尺寸会根据窗口的大小等而变化。 或它被裁剪等。
我想要的是在打印机上打印视口, 像纸一样拉伸它并保持纵横比。
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() != true)
{ return; }
StackPanel myPanel = new StackPanel();
myPanel.Margin = new Thickness(40);
Image myImage = new Image();
myImage.Width = dialog.PrintableAreaWidth - (2 * MYDPI);
myImage.Stretch = Stretch.Uniform;
RenderTargetBitmap bmp = new RenderTargetBitmap((int)dialog.PrintableAreaWidth, (int)dialog.PrintableAreaWidth, 96, 96, PixelFormats.Pbgra32);
bmp.Render(myViewPort);
myImage.Source = bmp;
myPanel.Children.Add(myImage);
myPanel.Measure(new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight));
myPanel.Arrange(new Rect(new Point(0, 0), myPanel.DesiredSize));
dialog.PrintVisual(myPanel, myName);
答案 0 :(得分:2)
以下工作,现在无论如何,图片都会缩放到纸张的大小 视口的大小
...
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() != true)
{
return;
}
Grid grid = new Grid();
grid.Margin = new Thickness(40);
//do this for each column
ColumnDefinition coldef;
coldef = new ColumnDefinition();
coldef.Width = new GridLength(dialog.PrintableAreaWidth, GridUnitType.Pixel);
grid.ColumnDefinitions.Add(coldef);
//do this for each row
RowDefinition rowdef;
rowdef = new RowDefinition();
rowdef.Height = new GridLength(1, GridUnitType.Auto);
grid.RowDefinitions.Add(rowdef);
//
rowdef = new RowDefinition();
rowdef.Height = new GridLength(1, GridUnitType.Auto);
grid.RowDefinitions.Add(rowdef);
TextBlock myTitle = new TextBlock();
myTitle.FontSize = 24;
myTitle.FontFamily = new FontFamily("Arial");
myTitle.TextAlignment = TextAlignment.Center;
myTitle.Text = myName;
grid.Children.Add(myTitle);
//put it in column 0, row 0
Grid.SetColumn(myTitle, 0);
Grid.SetRow(myTitle, 0);
Image myImage = new Image();
RenderTargetBitmap bmp = new RenderTargetBitmap((int)this.Width, (int)this.Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(myViewPort);
myImage.Source = bmp;
myImage.Stretch = Stretch.Uniform;
grid.Children.Add(myImage);
//put it in column 0, row 1
Grid.SetColumn(myImage, 0);
Grid.SetRow(myImage, 1);
grid.Measure(new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight));
grid.Arrange(new Rect(new Point(0, 0), grid.DesiredSize));
dialog.PrintVisual(grid, myName);