gpt4 book ai didi

c# - 使用 DrawingVisual 渲染 1 像素线

转载 作者:行者123 更新时间:2023-11-30 12:16:20 25 4
gpt4 key购买 nike

我看过几个关于在 WPF 中渲染 1 像素线的示例,但似乎没有一个适用于我的情况。我正在使用 DrawingVisual 和 DrawingContext 来绘制一些形状,并使用 RenderTargetBitmap 和 PngBitmapEncoder 来生成图像。在许多情况下,矩形具有 2 像素的边框,即使我将其设置为 1。我猜这是由于使用了与分辨率无关的渲染。

我找到了几个解决方案,但它们要么在 XAML 中,要么适用于绘图控件。我发现的最接近的东西是 XSnappingGuidelines/YSnappingGuidelines 但我找不到如何使用它的单个示例。非常缺乏这些属性的文档。

如何禁用 DrawingVisual 的分辨率独立渲染?

更新:这是我正在尝试做的事情:

声明一个 DrawingVisual:

DrawingVisual mainTemplate = new DrawingVisual();

获取上下文:

using (DrawingContext context = mainTemplate.RenderOpen())

绘制矩形:

penToUse = new Pen(new SolidColorBrush(Color.FromRgb(0xFF, 0xFF, 0xFF)), 1.0);
penToUse.DashStyle = DashStyles.Dash;
context.DrawRectangle(brushToUse, penToUse, new Rect(left, top, width, height));

在哪里设置渲染模式以对齐像素?

乔吉

最佳答案

在 WPF 中,当您绘制一条线时,该线以您指定的坐标为中心。因此,如果在具有 96 DPI 的设备上绘制一条从 10, 10 到 10, 20 的垂直线并且笔的宽度为 1,则该线实际上将在 9.5 和 10.5 之间绘制,占用两个像素。如果要对齐像素边缘上的线,则需要将其移动 0.5。在 120 DPI 显示器上,线条的宽度应为 0.8 以获取单个像素,您需要将其移动 0.4 以对齐像素边缘。

您不必使用 GuidelineSet,因为它所做的不仅仅是这个简单的移位,而是不必要地使代码复杂化。

关于c# - 使用 DrawingVisual 渲染 1 像素线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5571820/

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