Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何打印高清晰度图像?_C#_Printing_High Resolution_Barcode Printing_System.printing - Fatal编程技术网

C# 如何打印高清晰度图像?

C# 如何打印高清晰度图像?,c#,printing,high-resolution,barcode-printing,system.printing,C#,Printing,High Resolution,Barcode Printing,System.printing,打印机分辨率通常是屏幕分辨率的5-6倍。打印机的分辨率可以在6600 x 5100左右,而全高清屏幕的分辨率为1920 x 1080 1920 x 1080图像在屏幕上看起来很棒,但为了避免像素化,理想情况下应向打印机渲染更高分辨率的图像,例如6600 x 5100图像 我正在尝试将高清晰度图像(6600 x 5100)打印到我的高清晰度打印机(600 dpi),但我发现可用的打印区域仅为e.PageBounds指定的850 x 1100;请参阅下面的代码: Bitmap bitmapToPri

打印机分辨率通常是屏幕分辨率的5-6倍。打印机的分辨率可以在6600 x 5100左右,而全高清屏幕的分辨率为1920 x 1080

1920 x 1080图像在屏幕上看起来很棒,但为了避免像素化,理想情况下应向打印机渲染更高分辨率的图像,例如6600 x 5100图像

我正在尝试将高清晰度图像(6600 x 5100)打印到我的高清晰度打印机(600 dpi),但我发现可用的打印区域仅为e.PageBounds指定的850 x 1100;请参阅下面的代码:

Bitmap bitmapToPrint;
    public void printImage()
    {
        bitmapToPrint = new Bitmap(1700,2200);
        Font font = new Font(FontFamily.GenericSansSerif, 60, FontStyle.Regular);
        string alphabet = "abcdefghijklmnopqrstuvwxyz";
        Graphics graphics = Graphics.FromImage(bitmapToPrint);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 0);
        graphics.DrawString(alphabet, font, System.Drawing.Brushes.Black, 0, 1000);

        PrintDocument pd = new PrintDocument();
        pd.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
        pd.PrinterSettings.PrintToFile = true;
        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
        pd.Print();
    }
    void pd_PrintPage(object sender, PrintPageEventArgs e)
    {
        e.Graphics.DrawImage(bitmapToPrint, new PointF(0, 0));
        //Have a look at e.PageBounds, the dimensions are only 850x1100
    }
正如RogerN所指出的,要解决此问题,DrawImage调用必须简单地替换为:


e.Graphics.DrawImage(位图打印、新矩形F(0.0f、0.0f、850.0f、1100.0f))

在这种情况下,页面边界以百分之一英寸为单位指定(8.5“x 11”=850 x 1100),与打印机分辨率无关。如果您的图像已经具有高分辨率,则不需要执行任何其他操作,只需使用所需的目标矩形调用
DrawImage
。只需确保指定的目标矩形的单位与页面边界的单位相同。我刚刚使用1700 x 2200位图进行了测试,它只在左上角打印了850 x 1100区域。请编辑您的问题,以包含用于执行测试的确切代码。我怀疑您没有提供图像的目标大小。好的,我已经用确切的代码更新了我的问题。您需要为图像指定目标大小:e.Graphics.DrawImage(BitMapTopPrint,新矩形F(0.0f,0.0f,850.0f,1100.0f));但请注意,您可能还需要考虑页边距,页边距不能始终打印。在这种情况下,页边距以百分之一英寸为单位指定(8.5“x 11”=850 x 1100),与打印机分辨率无关。如果您的图像已经具有高分辨率,则不需要执行任何其他操作,只需使用所需的目标矩形调用
DrawImage
。只需确保指定的目标矩形的单位与页面边界的单位相同。我刚刚使用1700 x 2200位图进行了测试,它只在左上角打印了850 x 1100区域。请编辑您的问题,以包含用于执行测试的确切代码。我怀疑您没有提供图像的目标大小。好的,我已经用确切的代码更新了我的问题。您需要为图像指定目标大小:e.Graphics.DrawImage(BitMapTopPrint,新矩形F(0.0f,0.0f,850.0f,1100.0f));但请注意,您可能还需要考虑页边距,因为页边距不能始终打印