是基于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();
}