C# 调用打印机打印图片

是基于WPF的。
具体代码如下,打印时会有一个小弹窗一闪而过,还在继续找办法改进
由于目前使用的方法所需的变量类型和程序里需要打印的图片的变量类型不一样,所以这里我将需要打印的照片先保存为文件,然后再读取进来。

 private void button4_Click(object sender, RoutedEventArgs e)
        {
            MainBitmap = (BitmapImage)image.Source;

            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(MainBitmap));
            FileStream files = new FileStream("1.jpg", FileMode.Create, FileAccess.ReadWrite);
            encoder.Save(files);
            files.Close();

            PrintDocument pd = new PrintDocument();
            pd.DefaultPageSettings.PrinterSettings.PrinterName = "Canon SELPHY CP1200";
            PaperSize psize = new PaperSize();
            foreach (PaperSize i in pd.PrinterSettings.PaperSizes)
            {
                if (i.PaperName == "P 无边距 100x148mm 4x6\"") //无边距可正常居中,有边距0,0点位置需考虑边距
                {
                    psize = i;
                    break;

                }
                Console.WriteLine(i.PaperName);
            }
            pd.DefaultPageSettings.PaperSize = psize;
            pd.PrintPage += (s, args) =>
            {
                System.Drawing.Image i = System.Drawing.Image.FromFile("1.jpg");
                System.Drawing.Rectangle m = args.PageBounds;
                if (i.Width < i.Height)
                    i.RotateFlip(RotateFlipType.Rotate90FlipNone);

                if (i.Width >= i.Height)
                {
                    if ((double)i.Width / (double)i.Height <= (double)m.Width / (double)m.Height)
                    {
                        int w = (int)((double)i.Width / (double)i.Height * (double)m.Height);
                        int dx = (m.Width - w) / 2;
                        m.X = dx;
                        m.Y = 0;
                        m.Width = w;
                    }
                    else
                    {
                        int h = (int)((double)i.Height / (double)i.Width * (double)m.Width);
                        int dy = (m.Height - h) / 2;
                        m.X = 0;
                        m.Y = dy;
                        m.Height = h;
                    }
                }
                args.Graphics.DrawImage(i, m);
            };
            pd.Print();
        }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cccccc1212

这是c币不是人民币,不要充值

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值