使用边距打印,同时保持图像的纵横比C#

使用边距打印,同时保持图像的纵横比C#,c#,.net,image,winforms,printing,C#,.net,Image,Winforms,Printing,我正在使用WinForms。在我的表格中,我得到了一个picuturebox和4个文本框,上面有边距,下面有边距,左边有边距,右边有边距。我希望能够为显示在“打印预览”对话框中的图像创建页边距,但我还希望在提供页边距时按比例缩放图像。我还希望图像被包含在打印预览页面中,这意味着不需要对图像进行剪切。另一个问题是,当打印预览页面与我的图像大小相同时,为什么要剪切我的图像?我使用了一个850宽1100高的图像,当我点击打印预览图像时,它被剪掉了,而无需重新调整大小 下面是您可以测试的图像链接 下

我正在使用WinForms。在我的表格中,我得到了一个picuturebox和4个文本框,上面有边距,下面有边距,左边有边距,右边有边距。我希望能够为显示在“打印预览”对话框中的图像创建页边距,但我还希望在提供页边距时按比例缩放图像。我还希望图像被包含在打印预览页面中,这意味着不需要对图像进行剪切。另一个问题是,当打印预览页面与我的图像大小相同时,为什么要剪切我的图像?我使用了一个850宽1100高的图像,当我点击打印预览图像时,它被剪掉了,而无需重新调整大小

下面是您可以测试的图像链接

下面是在打印预览屏幕中未正确显示的图像。它缺少右边界和下边界

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
名称空间打印\u图像\u中心
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
pictureBox1.Image=新位图(@“C:\Users\Bob\Pictures\850x1100.png”);
}
私有void printDocument1_PrintPage(对象发送方,System.Drawing.Printing.PrintPageEventArgs e)
{
var img_width=e.PageBounds.width-e.MarginBounds.Left-Math.Abs(e.MarginBounds.Right-e.PageBounds.width);
var img_height=e.PageBounds.height-e.MarginBounds.Top-Math.Abs(e.MarginBounds.Bottom-e.PageBounds.height);
e、 图形.DrawImage(根据图像(pictureBox1.Image、图像宽度、图像高度)调整大小),
e、 边缘边界(左,e.MarginBounds.Top);
}
私有无效Btn\u打印\u单击(对象发送者,事件参数e)
{
printPreviewDialog1.Document=printDocument1;
//PrintDocument.originalmargins=true;
printDocument1.DefaultPageSettings.Margins.Top=Convert.ToInt32(txt_Top.Text);
printDocument1.DefaultPageSettings.Margins.Left=Convert.ToInt32(txt_Left.Text);
printDocument1.DefaultPageSettings.Margins.Right=Convert.ToInt32(txt\u Right.Text);
printDocument1.DefaultPageSettings.Margins.Bottom=Convert.ToInt32(txt_Bottom.Text);
printPreviewDialog1.ShowDialog();
}
私有图像大小根据图像(图像源、int-boxWidth、int-boxHeight)
{
图像大小图像;
double dbl=(double)Source.Width/(double)Source.Height;
//将图像高度设置为boxHeight,并检查结果宽度是否小于boxWidth,
//否则,将图像宽度设置为boxWidth并计算新高度

如果((int)((double)boxHeight*dbl)请在代码中提供
img.width
img.height
的值以解决问题。这是您唯一缺少的内容

var img = ResizeAcordingToImage(pictureBox1.Image, img_width, img_height);

e.Graphics.DrawImage(img, e.MarginBounds.Left, e.MarginBounds.Top, img.Width, img.Height);
以下是更改后的结果:

var img = ResizeAcordingToImage(pictureBox1.Image, img_width, img_height);

e.Graphics.DrawImage(img, e.MarginBounds.Left, e.MarginBounds.Top, img.Width, img.Height);