当前位置: 首页 > 知识库问答 >
问题:

笔划宽度为1px的线条外观

年烈
2023-03-14

我正在处理需要细垂直线的可视化。理想情况下,我希望它们是1px宽。当我使用默认的“range()”线性缩放宽度定位它们时,它们看起来具有不同的宽度,因为它们的计算位置并不总是整数个像素。不过,其中一些看起来正好是1像素宽(那些更亮)。

然而,当我在线性刻度上使用rangeRound()时,所有线条都具有相同的表观宽度,但它是2px,即使我明确指定了1px的描边宽度。使用数学.round() 舍入会得到相同的结果。当我尝试使用0.5的笔画宽度时,线条也是2px宽,只是更暗淡。

有可能画出“真实”的1px宽的线吗?

编辑:这是一些代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<style>

    svg {
        border : 1px solid grey;
    }
</style>
</head>
<body>
    <script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
    <script>

        var W = 1000, H = 400;

        var svg = d3.select("body").append("svg").attr("width",W).attr("height",H);

        svg.append("line").attr("x1",W/2).attr("y1",0).attr("x2",W/2).attr("y2",H).attr("stroke","black");
        svg.append("line").attr("x1",0).attr("y1",H/2).attr("x2",W).attr("y2",H/2).attr("stroke","black");

    </script>
</body>
</html>

在我的屏幕上(1920 x 1080),边框看起来像是1px宽,但是svg行看起来像是2px。

共有2个答案

督瑞
2023-03-14

将以下样式属性添加到您的d3元素:

.style('shape-rendering','crispEdges')

这使得线条更薄。

董品
2023-03-14

就像罗伯特·王成龙在评论中说的那样,给形状渲染添加清晰的边缘,就像这样:

svg.append("line").style('shape-rendering','crispEdges').attr("x1",W/2).attr("y1",0).attr("x2",W/2).attr("y2",H).attr("stroke","black")

http://jsfiddle.net/reko91/fAaRx/207/

        var W = 1000, H = 400;

        var svg = d3.select("body").append("svg").attr("width",W).attr("height",H);

        svg.append("line").style('shape-rendering','crispEdges').attr("x1",W/2).attr("y1",0).attr("x2",W/2).attr("y2",H).attr("stroke","black")
        svg.append("line").style('shape-rendering','crispEdges').attr("x1",0).attr("y1",H/2).attr("x2",W).attr("y2",H/2).attr("stroke","black")
 svg {
        border : 1px solid black; 
    }
   
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
 类似资料:
  • 我正在尝试绘制一个只有线条但笔画宽度不同的对象。这可能吗? 我的尝试: 不成功,最后一个笔画宽度用于整个< code >路径。

  • 问题内容: 我希望为元素提供重复的1px宽对角线条纹背景。似乎应该可以做到这一点,但是在Safari中呈现时: 看来浏览器的别名处理不善,导致条带分布不均。关于如何解决此问题或完成我正在寻找的另一种方式的任何想法? 问题答案: 在这里,对难题的解释更为精巧:根据毕达哥拉斯原理(及其三元组),不可能有一个正方形(只是两个直角三角形组成的正方形),其边是整数,对角线的长度为整数。 这是因为1 2 +1

  • 问题内容: 具有SceneKit线图元类型的笔划宽度(http://beesandbombs.tumblr.com/post/96195652814/cube)) using scene kit. 我试图立刻解决具体是如何编辑的笔画宽度的SCNGeometryPrimitiveType.Line元素。 我创建线条的基本方法是这样的: 但我不知道如何增加使用SceneKit 绘制的线条的宽度。我该如

  • 我有一个自定义视图,我可以在其中画线,我也可以选择线的宽度。我还有一个统计数据,在另一个片段中,我应该显示每一个笔画画了多少行。 所以我想创建一个自定义的监听器,它应该对不同的笔划宽度做出反应。每当笔划发生变化时,统计数据应显示所选笔划的新计数。。。 我用界面尝试了一下,但我真的不知道如何前进。我该怎么做?

  • 问题内容: 谁能描述我如何使用opencv或simplecv在python中实现SWT? 问题答案: 好的,这里是这样: 该链接包含有关实现的详细信息,底部的代码下载链接:SWT 为了完整起见,还提到SWT或Stroke Width Transform由Epshtein等人在2010年设计,迄今为止已成为最成功的文本检测方法之一。它不使用机器学习或详尽的测试。基本上在对输入图像进行Canny边缘检

  • 我刚刚用JavaFX的路径做了一些测试,在使用LineTo时发现了一个错误: 用我的实用方法: 当我这样做的时候,没关系。但是当我希望strokewidth更小(0.2或0.1)时,左边的边框是不可见的,其他的是可见的..有人知道为什么吗?谢了。