SnapsToDevicePixels定位工件。

编程入门 行业动态 更新时间:2024-10-26 10:34:34
本文介绍了SnapsToDevicePixels定位工件。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我绘制线条,一些线条跳过像素,让它们变空。 当我想创建单元格时,这是一个严重的问题。 我的目标是画一个网格。 如何解决问题? 屏幕截图 [ ^ ]

I draw lines and some lines skip pixels leaving them empty. It is a serious problem when i wanna create cells. My goal is to draw a grid. How to solve the problem? Screenshot[^]

<Canvas Background="Black" RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True"> <Line X1='30' Y1='30' X2='100' Y2='30' Stroke="White"/> <Line X1='30' Y1='31' X2='100' Y2='31' Stroke="White"/> <Line X1='30' Y1='32' X2='100' Y2='32' Stroke="White"/> <Line X1='30' Y1='33' X2='100' Y2='33' Stroke="White"/> <Line X1='30' Y1='34' X2='100' Y2='34' Stroke="White"/> <Line X1='30' Y1='35' X2='100' Y2='35' Stroke="White"/> <Line X1='30' Y1='36' X2='100' Y2='36' Stroke="White"/> <Line X1='30' Y1='37' X2='100' Y2='37' Stroke="White"/> <Line X1='30' Y1='38' X2='100' Y2='38' Stroke="White"/> </Canvas>

下一个代码尝试绘制一个网格,但由于DPI导致网格之间的距离不同,网格变得混乱独立性: 截图 [ ^ ]

The next code tries to draw a grid, but the grid comes to be messed as distances between lines differ due to DPI independence: Screenshot[^]

public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.Loaded += MainWindow_Loaded; } Canvas canvas; void MainWindow_Loaded(object sender, RoutedEventArgs e) { canvas = new Canvas(); canvas.Background = Brushes.Black; this.Content = canvas; RenderOptions.SetEdgeMode(canvas, EdgeMode.Aliased); canvas.SnapsToDevicePixels = true; Shape(); } double i = 0; private void Shape() { canvas.Children.Clear(); for (double i = 0; i < 20; i += 2) { Line line = new Line(); line.X1 = 30; line.Y1 = 30 + i; line.X2 = 100; line.Y2 = 30 + i; line.Stroke = Brushes.White; line.StrokeThickness = 1; canvas.Children.Add(line); } } }

推荐答案

下一个代码解决使形状以物理屏幕像素绘制的问题:

The next code solves the problem making shapes to be drawn in physical screen pixels: canvas.RenderTransform = new MatrixTransform( PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice);

我在问题中写的代码的固定版本:

The fixed version of the code i wrote in the question:

public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.Loaded += MainWindow_Loaded; } Canvas canvas; void MainWindow_Loaded(object sender, RoutedEventArgs e) { canvas = new Canvas(); canvas.Background = Brushes.Black; this.Content = canvas; RenderOptions.SetEdgeMode(canvas, EdgeMode.Aliased); canvas.SnapsToDevicePixels = true; canvas.RenderTransform = new MatrixTransform( PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice); Shape(); } double i = 0; private void Shape() { canvas.Children.Clear(); for (double i = 0; i < 20; i += 2) { Line line = new Line(); line.X1 = 30; line.Y1 = 30 + i; line.X2 = 100; line.Y2 = 30 + i; line.Stroke = Brushes.White; line.StrokeThickness = 1; canvas.Children.Add(line); } } }

Codeproject滞后。 来源 [ ^ ]。

更多推荐

SnapsToDevicePixels定位工件。

本文发布于:2023-11-03 06:28:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1554452.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:工件   SnapsToDevicePixels

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!