我正在使用 bing map SDK 编写一个小的 wpf 应用程序。
我正在从我的 map 生成位图,我希望能够在 A4 纸上横向打印这张 map 。
我尝试了几种方法,但我的照片总是纵向打印。
这是我使用的代码:
MemoryStream ms = new MemoryStream();
myImage.Save(ms,myImage.RawFormat);
ms.Seek(0, SeekOrigin.Begin);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.StreamSource = ms;
bi.EndInit();
var vis = new DrawingVisual();
var dc = vis.RenderOpen();
dc.DrawImage(bi, new Rect { Width = bi.Width, Height = bi.Height });
RotateTransform rotateTransform = new RotateTransform(90);
dc.PushTransform(rotateTransform);
dc.Close();
var pdialog = new PrintDialog();
pdialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
if (pdialog.ShowDialog() == true)
{
pdialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
pdialog.PrintVisual(vis, "My Image");
}
注意:myImage 是我的位图文件。 注意:我添加了 90° 变换,但没有效果。
有人知道吗?
非常感谢:)
最佳答案
我最近在 Printing
命名空间上花费了大量时间,在像 Clemens 那样重现代码后,我得到了预期的结果。我也同意您应该按照 Clemens 的建议使用 using
语句。
此外,在测试我自己的代码时,我在打印到 XPS 打印机和普通打印机之间遇到了奇怪的事件。尝试这样的事情:
MemoryStream ms = new MemoryStream();
myImage.Save(ms,myImage.RawFormat);
ms.Seek(0, SeekOrigin.Begin);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.St
reamSource = ms;
bi.EndInit();
using(var vis = new DrawingVisual())
{
var dc = vis.RenderOpen();
dc.DrawImage(bi, new Rect { Width = bi.Width, Height = bi.Height });
dc.Close();
var pdialog = new PrintDialog();
if (pdialog.ShowDialog() == true)
{
pdialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
System.Printing.ValidationResult result = pdialog.PrintQueue.MergeAndValidatePrintTicket(pdialog.PrintQueue.UserPrintTicket, pdialog.PrintTicket);
pdialog.PrintQueue.CurrentJobSettings.CurrentPrintTicket = result.ValidatedPrintTicket;
pdialog.PrintQueue.Commit();
if(pdialog.PrintQueue.IsXpsDevice)
{
var writer = PrintQueue.CreateXpsDocumentWriter(pdialog.PrintQueue);
writer.Write(vis, pdialog.CurrentJobSettings.CurrentPrintTicket);
}
else
{
pdialog.PrintVisual(vis, "My Image");
}
}
}
我意识到可能会有一些冗余,但这是我遵循的类似方法,我的代码应该用于让果汁流动起来,希望它能引导您找到解决方案,如果它本身不是解决方案的话。另一个虽然,尝试打印到真正的打印机也测试两个打印源产生相同的输出。我经常发现物理打印机给我的输出与虚拟打印机不同。
另外,我找到了this ,尽管我不确定它是否会有所帮助。
如果您有任何问题,请告诉我。
关于c# - 无法使用 WPF 在横向上打印我的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619079/