一个打印问题,请大家指点江山。

workonline1 2018-07-23 05:48:35

图片尺寸1261x1838
我想把这个图,在A6纸上打印出来。结果打出来成这个样子。A4倒是正常。


打印机这块还没过关。第一次接触。

以下是代码


private void button1_Click_1(object sender, EventArgs e)
{
printDocument1.Print();
}

private void button2_Click(object sender, EventArgs e)
{
printDocument1.DefaultPageSettings.Landscape = true;
printPreviewDialog1.Document = this.printDocument1;
printPreviewDialog1.ShowDialog();
}

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
try
{

Bitmap bitmap = pictureBox1.Image as Bitmap;
e.Graphics.DrawImage(bitmap, 0,0,1024,768);

}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}

分不多了啦。都来分吧。谢谢
...全文
333 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
workonline1 2018-07-26
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
Point[] 用于切变
其中有三个成员,分别表示左上角、右上角、左下角的坐标
这三个点可唯一确定一个平行四边形,原图将被映射到这个区域里去

理解了。感谢大佬指点。感谢万分。
workonline1 2018-07-25
  • 打赏
  • 举报
回复
有没有缩放到A6大小的指令呢
workonline1 2018-07-25
  • 打赏
  • 举报
回复
感谢回复

请注意看,红框彩色的A6 照片
篮筐白色是A4
A6实际打印出来 只有A4的四分之一
threenewbee 2018-07-25
  • 打赏
  • 举报
回复
现在打印预览里面的对不对呢?还是打印预览和实际的效果不同?怎么会一半黑白一半彩色?
xuzuning 2018-07-25
  • 打赏
  • 举报
回复
Point[] 用于切变
其中有三个成员,分别表示左上角、右上角、左下角的坐标
这三个点可唯一确定一个平行四边形,原图将被映射到这个区域里去
workonline1 2018-07-25
  • 打赏
  • 举报
回复
好的 感谢。


// Create parallelogram for drawing image.
Bitmap bitmap = pictureBox1.Image as Bitmap;
Point ulCorner = new Point(0,0);
Point urCorner = new Point(0, 100);
Point llCorner = new Point(850, 850);
Point[] destPara = { ulCorner, urCorner, llCorner };

// Create rectangle for source image.
Rectangle srcRect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
GraphicsUnit units = GraphicsUnit.Pixel;

// Draw image to screen.
e.Graphics.DrawImage(bitmap, destPara, srcRect, units);


Point ulCorner = new Point(0,0);
Point urCorner = new Point(0, 100);
Point llCorner = new Point(850, 850);
这三个参数还没完全理解啥意思。调不好。我在试试

xuzuning 2018-07-25
  • 打赏
  • 举报
回复
Point[] 用于切变,是我贴错了
关键是 printDocument1_PrintPage 方法体的写法
比如
            printDocument1.DefaultPageSettings.Landscape = true;

//printDocument1.DefaultPageSettings = new PaperSize("A6");
printPreviewControl1.Document = printDocument1;
printPreviewControl1.Columns = 2;
printPreviewControl1.Rows = 2;

printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
}
int i = 0;
void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
var g = e.Graphics;
int r = i / printPreviewControl1.Columns;
int c = i % printPreviewControl1.Columns;
var bmp = new Bitmap("1.jpg");
var w = bmp.Width / printPreviewControl1.Columns;
var h = bmp.Height / printPreviewControl1.Rows;
var rect = new RectangleF(c*w, r*h, w, h);
g.DrawImage(bmp, e.PageBounds, rect, GraphicsUnit.Pixel);
if (++i < printPreviewControl1.Rows * printPreviewControl1.Columns)
{
e.HasMorePages = true;
}
}

就切分成4张图打印了
你#8示例的是打印一张已经拼接好的图,至需要控制好目标图片的大小和长宽比例就行了
纸张只是参考,实际大小由目标矩形决定,缩放由 PrintDocument 控件自行完成
workonline1 2018-07-25
  • 打赏
  • 举报
回复
Point[] 的参数我不知道怎么赋值。是纸的纸张尺寸吗
workonline1 2018-07-25
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
e.Graphics.DrawImage(bitmap, 0,0,1024,768);
固定了输出图片的尺寸,显然是不对的
如需缩放,则应用 DrawImage(Image, Point[], Rectangle, GraphicsUnit) 方法
其中 Rectangle 从 e 中取得

如需左右拼接,则应使用 DrawImage(Image, Rectangle, Rectangle, GraphicsUnit)
前一个 Rectangle 从 e 中取得,后一个 Rectangle 根据拼接关系计算而得

我的图是拼好打印的。所以只要缩放就行了。

DrawImage(Image, Point[], Rectangle, GraphicsUnit)

Point[]还没理解什么意思,画一个平行四边形。我要画这个干嘛?








xuzuning 2018-07-25
  • 打赏
  • 举报
回复
e.Graphics.DrawImage(bitmap, 0,0,1024,768);
固定了输出图片的尺寸,显然是不对的
如需缩放,则应用 DrawImage(Image, Point[], Rectangle, GraphicsUnit) 方法
其中 Rectangle 从 e 中取得

如需左右拼接,则应使用 DrawImage(Image, Rectangle, Rectangle, GraphicsUnit)
前一个 Rectangle 从 e 中取得,后一个 Rectangle 根据拼接关系计算而得
workonline1 2018-07-24
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
不知道你希望干嘛,是打印完图像换页?

我想在A6上 打印完整的 1261x1838(两个一样拼接图)
threenewbee 2018-07-24
  • 打赏
  • 举报
回复
不知道你希望干嘛,是打印完图像换页?
workonline1 2018-07-24
  • 打赏
  • 举报
回复
版主帮我看看

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧