gpt4 book ai didi

c# - WPF、多边形和多边形

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

我正在使用 WFP 构建一个 C# 应用程序,我正在尝试绘制形状,每个形状都属于一个类,此类包含一个用于外部形状的多边形,以及 1 到 3 条折线,使其看起来像真正的 2D对象,这样我就可以动态更改整个形状的某些属性(颜色、可见性等)我必须说,有些折线是根据所需的高度和宽度通过循环创建的

但是现在我正面临着渲染一些折线的问题如果在调试结束时用paint来表示提取的点,点在正确的位置(x,y)但是最终的图片不太准确,我希望最终的结果看起来像位图像素,没有阴影,模糊或边缘效应..

这是一个例子(Panel是给网格起的名字)

 public partial class Window1 : Window {

private Polyline zigzag;

public Window1() {
InitializeComponent();
PointCollection points = new PointCollection();
ArrayList axisX = new ArrayList();
ArrayList axisY = new ArrayList();

zigzag = new Polyline();
zigzag.Stroke = Brushes.Black;

int count = 1;
Boolean increase = true;
//the number 60 in this loop is to represent the width of the main shape
for (int p = 3; p < 60 - 3; p++) {
if (count == 1) {
axisX.Add(p);
axisY.Add(5);
increase = true;
}
if (count == 4) {
axisX.Add(p);
axisY.Add(2);
increase = false;
}
if (increase) {
count++;
}
else {
count--;
}
}

for (int i = 0; i < axisX.Count; i++) {
//the number 10 is to represent the position where the Poliline is to be placed
int tmpx = 10 + (int)axisX[i];
int tmpy = 10 + (int)axisY[i];
points.Add(new Point(tmpx, tmpy));
}

this.zigzag.Points = points;
RenderOptions.SetEdgeMode(Panel , EdgeMode.Aliased);
Panel.Children.Add(zigzag);

}

}

图片显示了上面绘制的锯齿形,以及它应该看起来像下面的样子

enter image description here

最佳答案

坐标系的原点在左上角像素的左上角。要命中中间的像素,您必须指定坐标,例如 3.5 等。

我稍微缩短了您的代码,希望您不要介意。 (还是一样,只是少了行)

PointCollection points = new PointCollection();

zigzag = new Polyline();
zigzag.Stroke = Brushes.Black;

for (int i = 1; i < 60 - 3; i = i + 3)
{
points.Add(
new Point(
10.5f + i,
10.5f + (i % 2 == 0 ? 2 : 5)
));
}

this.zigzag.Points = points;
RenderOptions.SetEdgeMode(Panel1, EdgeMode.Aliased);
Panel1.Children.Add(zigzag);

我将两个方向的翻译从 10 增加到 10.5。小数部分应为 0.5 以指示像素的中心。

关于c# - WPF、多边形和多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706283/

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