gpt4 book ai didi

c# - System.Drawing.Pen 错误?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:09 25 4
gpt4 key购买 nike

我是新来的,所以我希望我的消息能被清楚地编辑...

我试图在这里向您展示一张非常解释性的图片,但不允许新用户发布图片。好吧,换句话说:当打印在纸上或 PDF 时,我画了 3 条恰好 10 厘米的线。但是在屏幕上,中间线应该看起来与最低线相同。它们之间的唯一区别是 Width 属性。第一条红线。宽度为 0.1 毫米,第二条红线。宽度为 0.5 毫米。

我给两条红线都设置了 DashPattern:4mm 破折号 - 1mm 间距 - 1mm 破折号 - 1mm 间距。

如我所写;打印时,红色线条上的 Dash 图案完全相同!当图形显示在屏幕上时,我认为这是一个错误,但也许我遗漏了一些东西......您将在下面找到要复制/粘贴的 C# 示例项目的完整代码。

提前致谢!

保罗

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;

public partial class Form1 : Form
{
PrintDialog dialog1 = new PrintDialog();
PrintDocument printdocument1 = new PrintDocument();

public Form1()
{
this.Text = "System.Drawing.Pen: Bug?";
this.Width = 600;
this.Height = 400;


// add panel on form
Panel panel1 = new Panel();
panel1.Width = 500;
panel1.Height = 300;
panel1.BackColor = Color.White;
panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
this.Controls.Add(panel1);

// add print button on form
Button butPrint = new Button();
butPrint.Size = new Size(72, 28);
butPrint.Location = new Point(510, 20);
butPrint.Text = "Print";
butPrint.Click += new System.EventHandler(this.butPrint_Click);
this.Controls.Add(butPrint);

// add printpage handler
this.printdocument1.PrintPage += new PrintPageEventHandler(this.printdocument1_PrintPage);
}

private void makeSomeGraphics(Graphics g)
{
g.Clear(Color.White);
//g.SmoothingMode = SmoothingMode.AntiAlias;

g.PageUnit = GraphicsUnit.Millimeter;
g.PageScale = 1.0f;

Pen thinPenBlack = new Pen(Brushes.Black, 0.1f); // penWidth = 0.1mm
Pen thinPenRed = new Pen(Brushes.Red, 0.1f); // penWidth = 0.1mm
Pen thickPenRed = new Pen(Brushes.Red, 0.5f); // penWidth = 0.5mm

float y = 20.0f;
thinPenBlack.DashStyle = DashStyle.Solid;
g.DrawLine(thinPenBlack, 10, y, 110, y);

y = 30.0f;
// The length of each dash and space in the dash pattern is the product of the element value in the array and the width of the Pen
// so divide float by penWidth
float w = thinPenRed.Width;
thinPenRed.DashPattern = new float[] { 4.0f / w, 1.0f / w, 1.0f / w, 1.0f / w };
g.DrawLine(thinPenRed, 10, y, 110, y);

// now, a wider pen
y = 40.0f;
w = thickPenRed.Width;
thickPenRed.DashPattern = new float[] { 4.0f / w, 1.0f / w, 1.0f / w, 1.0f / w };
g.DrawLine(thickPenRed, 10, y, 110, y);
}

private void panel1_Paint(object sender, PaintEventArgs e)
{
makeSomeGraphics(e.Graphics);
}

private void butPrint_Click(object sender, EventArgs e)
{
dialog1.UseEXDialog = true;
dialog1.Document = printdocument1;
if (dialog1.ShowDialog() == DialogResult.OK)
{
printdocument1.Print();
}
}

private void printdocument1_PrintPage(object sender, PrintPageEventArgs e)
{
makeSomeGraphics(e.Graphics);
e.HasMorePages = false;
}


}

最佳答案

不知何故,如果您将 thinPenRed 的厚度值更改为 >= 0.4f,您将在屏幕上和打印上得到相同的图案。除以 w 时是否会出现舍入问题?

关于c# - System.Drawing.Pen 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com