我正在使用WFP构建应用程序C#,我正在尝试绘制形状,每个形状属于一个类,这样的类包含外部形状的Polygon,以及1到3个折线使其看起来像真正的2D对象,这样我就可以动态改变整个形状的一些属性(颜色,可见性等) 我必须说一些折线是根据所需的高度和宽度由循环创建的
但现在我正面临着一些带有PolyLines渲染的探测器 如果使用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);
}
}
图片显示上面绘制的之字形,以及下面的方式
答案 0 :(得分:2)
坐标系的原点位于左上角像素的左上角。要击中中间的像素,您必须指定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以指示像素的中心。