c# - 无法使用 WPF 在横向上打印我的位图

标签 c# wpf image printing bitmap

我正在使用 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/

相关文章:

html - 围绕图像问题环绕文本

android - 如何从 android 中运行的视频中捕获图像?

c# - 使用 Async 和 Await 进行异步编程

c# - 使用 WPF 动画淡出任何控件

c# - 为什么值类型不能为空

C#、WPF - VisualBrush 和 OpacityMask

c# - 从列表框拖放到文本框

c# - 从命令行运行 ASP.NET Web 应用程序

c# - 如何评估代码中的 RelativeSource 对象以提供有效的 Source 等效项

java - 在另一个图像上添加图像?