如何在打印机上画一条看起来比像素还细的线?

Posted

技术标签:

【中文标题】如何在打印机上画一条看起来比像素还细的线?【英文标题】:How can I draw a line in a printer that looks thinner than a pixel? 【发布时间】:2012-06-11 02:45:34 【问题描述】:

我知道 GDI 限制。 GDI 只能绘制宽度至少为 1 像素的线。但是我还是想在打印机上画一条看起来比 1 像素还细的线。

你的意思是我可以这样做:

with cLogBrush do
begin
    lbStyle := BS_Solid;
    lbColor := ACanvas.Pen.Color;
    lbHatch := 0;
end;  
dwStyle := PS_COSMETIC or PS_ALTERNATE;
ACanvas.Pen.Handle := ExtCreatePen(dwStyle, 1, cLogBrush, 0, nil);
ACanvas.MoveTo(X1, Y1);
ACanvas.LineTo(X2, Y2);

【问题讨论】:

我会相信你的话,GDI 和打印处理像素而不是其他单位。您可以尝试使用抖动来伪造线宽。 【参考方案1】:

您可以(例如)绘制一条由黑白像素交替组成的线。至少对于 600 到 1200 DPI 的典型激光打印机来说,这通常会很好地融合成一条看起来不那么暗的线条。不过,我应该补充一点,一台好的激光打印机只有一个像素宽的线条确实很细。

这里的很多东西确实取决于打印机。例如,对于大多数喷墨打印机,您可以绘制的最细线更粗,即使/如果它们引用相同(甚至更高)的分辨率。线条通常也不是很干净——在这两种情况下,它们在中心最暗,并且褪色到纸张颜色,但是使用“褪色”的喷墨通常要慢一些,所以边缘这条线不太干净。

【讨论】:

你的意思是我可以这样做:

以上是关于如何在打印机上画一条看起来比像素还细的线?的主要内容,如果未能解决你的问题,请参考以下文章

在 JPEG 图像上画一条简单的线

Swift - UIView 绘制 1 像素宽度的线

opencv目标检测之canny算法

使用鼠标单击未获得 OpenGL 的输出以打印行

画一条可以像 Swift 中的 Xcode 助手编辑器一样伸展的线

如何画一条斜线