Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Четкость линий в WPF. Линия не четкая. 
V
    Опции темы
jenik15
Дата 19.11.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Я вот создал приложение и рисую в одном методе сразу два разных типа линий. 
Объясните мне, пожалуйста, почему сетка не такая же четкая, как и линии. В коде все выглядит совершенно одинаково.SnapsToDevicePixels усановлен в true.

Выделить всёкод C#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
foreach(var line in processor.ShowGrid())
                    {
                          Wpf.Line lineToAdd = new System.Windows.Shapes.Line();
                        lineToAdd.X1 = line.Point1.X;
                        lineToAdd.X2 = line.Point2.X;
                        lineToAdd.Y1 = line.Point1.Y;
                        lineToAdd.Y2 = line.Point2.Y;
                        lineToAdd.Stroke = System.Windows.Media.Brushes.Black;
                        lineToAdd.StrokeThickness = 1;
                       
                        this.graphicOutput.Children.Add(lineToAdd);
                    }
                    foreach (var line in lines)
                    {
                        Wpf.Line lineToAdd = new System.Windows.Shapes.Line();
                        lineToAdd.X1 = line.Point1.X;
                        lineToAdd.X2 = line.Point2.X;
                        lineToAdd.Y1 = line.Point1.Y;
                        lineToAdd.Y2 = line.Point2.Y;
                        lineToAdd.Stroke = System.Windows.Media.Brushes.Black;
                        lineToAdd.StrokeThickness = 1;
                        this.graphicOutput.Children.Add(lineToAdd);
                    }

user posted image

PM MAIL   Вверх
Partizan
Дата 20.11.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



SnapsToDevicePixels обычно помогает преодолеть такую вот "размытость" smile

Это сообщение отредактировал(а) Partizan - 20.11.2009, 09:48


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
tol05
Дата 20.11.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



Цитата(Partizan @  20.11.2009,  08:47 Найти цитируемый пост)
SnapsToDevicePixels обычно помогает преодолеть такую вот "размытость" smile

Цитата(jenik15 @  19.11.2009,  22:46 Найти цитируемый пост)
SnapsToDevicePixels усановлен в true


а теперь вопрос )
Выделить всёкод C#
1:
this.graphicOutput.Children.Add(lineToAdd);

что такое graphicOutput и кто его родители? Вообще как выглядит VisualTree до этого элемента?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
jenik15
Дата 20.11.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



graphicOutput это Grid у него установлен SnapsToDevicePixels 
родительский у него также Grid LayoutRoot ему ничего не установлено.
а у LayoutRoot сам контрол

Выделить всёРазметка XML
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
<UserControl  
    mc:Ignorable="d"
    x:Class="GradientDescentWPF.GraphControl"
    x:Name="UserControl"
    d:DesignWidth="640" d:DesignHeight="480" Width="200" Height="200">
    <UserControl.Resources>
        <ControlTemplate x:Key="GraphButtonStyle" TargetType="{x:Type Button}">
            <Grid Width="Auto" Height="Auto"/>
        </ControlTemplate>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot">
        <Grid Margin="8,8,8,8" x:Name="graphicOutput" SnapsToDevicePixels="true" Background="#FFDFD3D3" MouseLeftButtonUp="gridtest_MouseLeftButtonUp" LayoutUpdated="graphicOutput_LayoutUpdated"/>
    </Grid>
</UserControl>


SnapsToDevicePixels="true" пробовал поставить всему контролу.




Это сообщение отредактировал(а) jenik15 - 20.11.2009, 12:01
PM MAIL   Вверх
tol05
Дата 20.11.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 3
Всего: 170



1. Я попробовал каким-то образом порисовать сетки - размытия не вижу.
2. Непонятно, что зто за кривые линии на Вашем скриншоте, каким образом они прорисовываются. 

Одним словом - ответа у меня нет.

Если есть время - может быть имеет смысл попробовать нарисовать сетку не через Shapes, а через  Drawing? Вот неплохое обсуждение 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Partizan
Дата 20.11.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Цитата(tol05 @ 20.11.2009,  11:38)
Цитата(Partizan @  20.11.2009,  08:47 Найти цитируемый пост)
SnapsToDevicePixels обычно помогает преодолеть такую вот "размытость" smile

Цитата(jenik15 @  19.11.2009,  22:46 Найти цитируемый пост)
SnapsToDevicePixels усановлен в true


а теперь вопрос )
Выделить всёкод C#
1:
this.graphicOutput.Children.Add(lineToAdd);

что такое graphicOutput и кто его родители? Вообще как выглядит VisualTree до этого элемента?

Виноват....по диагонали прочёл...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
jenik15
Дата 21.11.2009, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



линия и сетка рисуются в примере кода:
  
Выделить всёкод C#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
                   foreach(var line in processor.ShowGrid())
                    {
                          Wpf.Line lineToAdd = new System.Windows.Shapes.Line();
                        lineToAdd.X1 = line.Point1.X;
                        lineToAdd.X2 = line.Point2.X;
                        lineToAdd.Y1 = line.Point1.Y;
                        lineToAdd.Y2 = line.Point2.Y;
                        lineToAdd.Stroke = System.Windows.Media.Brushes.Black;
                        lineToAdd.StrokeThickness = 1;
                       
                        this.graphicOutput.Children.Add(lineToAdd);
                    }
                    foreach (var line in lines)
                    {
                        Wpf.Line lineToAdd = new System.Windows.Shapes.Line();
                        lineToAdd.X1 = line.Point1.X;
                        lineToAdd.X2 = line.Point2.X;
                        lineToAdd.Y1 = line.Point1.Y;
                        lineToAdd.Y2 = line.Point2.Y;
                        lineToAdd.Stroke = System.Windows.Media.Brushes.Black;
                        lineToAdd.StrokeThickness = 1;
                        this.graphicOutput.Children.Add(lineToAdd);
                    }


первый сетка, а второй кривая линия, она просто состоит из других линий.

Это сообщение отредактировал(а) jenik15 - 21.11.2009, 01:57
PM MAIL   Вверх
math64
Дата 21.11.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 2
Всего: 72



Кривую лучше рисовать полилайном - соединения будут красивее и можно настроить их тип.
Сетку рисую так, никаких размытостей не замечал:
Выделить всёкод C#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
    protected override void OnRender(DrawingContext dc)
    {
      dc.DrawRectangle(Brushes.Transparent, null, new Rect(RenderSize));
      var pen = new Pen(Brushes.Gray, 1);
      if (ShowGrid)
      {
        double gridStep = GridSize.Height;
        for (int i = 0; ; i++)
        {
          double y = i * gridStep;
          if (y > RenderSize.Height)
            break;
          dc.DrawLine(pen, new Point(0, y)new Point(RenderSize.Width, y));
        }
        gridStep = GridSize.Width;
        for (int i = 0; ; i++)
        {
          double x = i * gridStep;
          if (x > RenderSize.Width)
            break;
          dc.DrawLine(pen, new Point(x, 0)new Point(x, RenderSize.Height));
        }
      }
    }

PM   Вверх
jenik15
Дата 23.11.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Cпасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1118 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.