powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Засада с картинками, опять DPI awareness.
7 сообщений из 7, страница 1 из 1
Засада с картинками, опять DPI awareness.
    #39275769
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал простейшее приложение:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<Window x:Class="TryAware.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
		xmlns:local="clr-namespace:TryAware"
        Title="Process DPI awareness" Height="120" Width="150" KeyDown="Window_KeyDown" SizeToContent="WidthAndHeight">
	<StackPanel>
		<ToolBarTray>
			<ToolBar Background="Transparent" Height="Auto">
				<Button>
					<Image Source="Images/Settings-20/Settings-20-100.png" SnapsToDevicePixels="True" UseLayoutRounding="True" MinWidth="20" MinHeight="20" Width="20" Height="20" VerticalAlignment="Center" HorizontalAlignment="Center"/>
				</Button>
			</ToolBar>
		</ToolBarTray>
		<Image Source="Images/Settings-20/Settings-20-100.png"
							 Width="20" Height="20" Margin="15" MinWidth="20" MinHeight="20" Stretch="None"
							 SnapsToDevicePixels="True" UseLayoutRounding="True" VerticalAlignment="Center" HorizontalAlignment="Center" />
	</StackPanel>
</Window>



Картинка Settings-20-100.png имеет размер 20*20 px, 96 DPI.
На компьютере стоит 100%, 96DPI, Windows 10. Запустил, всё отображается ОК. (см. верхнюю часть рисунка).

Ставлю на компьютере 125%, 120 DPI. Меняю Image Source на "Images/Settings-20/Settings-20-125.png". Картинка размером 25*25px, 120DPI. Пересобираю приложение, запускаю, имею: верхняя картинка (в тулбаре) имеет размер верные 25PX, но почему-то размытая (я специально нарисовал попиксельные уголки, что бы отследить это). Вторая картинка (нижняя) почему-то вообще имеет размер - 25*24px! (по уголкам видно, что обрезана) Почему? Какой код отобразит картинки корректно под разными DPI? Всевозможные комбинации параметров SnapsToDevicePixels, UseLayoutRounding, VerticalAlignment, HorizontalAlignment, Stretch и т.п. испробовал - ничего не помогает.
...
Рейтинг: 0 / 0
Засада с картинками, опять DPI awareness.
    #39275882
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно, такое ощущение, что картинку сначала сжимают, а потом восстанавливают до первоначального раздела. Если Image выводится сам по себе, на окно, то всё более-менее в порядке. Если завернуть в Button или в Toolbar - то картинка портится. Пробовал завернуть в Tooltip - картинка в порядке.

Вот, сделал ещё примерчик, в тулбаре первая картинка - это кнопка, видно, что она сжата-растянута. А вторая картинка - это просто картинка, без кнопки. Такое ощущение, что взяли поломанную картинку с кнопки и её ещё раз сжали-растянули.
...
Рейтинг: 0 / 0
Засада с картинками, опять DPI awareness.
    #39277853
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выявил ещё две закономерности. Может, они что-то подскажут нашим гуру, и они помогут разобраться?

1. Изображения ломаются только на DPI, НЕ кратным 96 (100%). Если разрешении 100%, 200%, 300% - всё норм. 125, 150 и т.д - плохо:
...
Рейтинг: 0 / 0
Засада с картинками, опять DPI awareness.
    #39277854
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 странность: картинка на дробных разрешениях ломается, только если её поместить в кнопку, даже если кнопка заведомо бОльшего размера, чем картинка. Если картинка просто лежит на форме, тулбаре, или в тултипе, то всё норм:
...
Рейтинг: 0 / 0
Засада с картинками, опять DPI awareness.
    #39277857
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
предыдущий рисунок:

image 1 - рисунок внутри кнолпки на тулбаре
image 2 - рисунок просто на тулбаре
image 3 - рисунок на форме
image 4 - рисунок внутри кнопки, кнопка в окне
...
Рейтинг: 0 / 0
Засада с картинками, опять DPI awareness.
    #39277874
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я долго страдал, пока не нашел истинный путь, отказаться от растровой графики совсем.
по этому совет только 1.
...
Рейтинг: 0 / 0
Засада с картинками, опять DPI awareness.
    #39277996
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, скажите, у Вас есть реально работающий пример на WPF, что бы векторный рисунок на 175% (168DPI) нарисовал pixel precise?

Вот картинка из моего сообщения 19094862 :

Код: xml
1.
2.
3.
4.
5.
6.
7.
		<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="Layer_1_Algn" x:Key="Layer_1_Algn" Width="20" Height="20" Canvas.Left="0" Canvas.Top="0">
			<Path SnapsToDevicePixels="True" Width="10" Height="10" Canvas.Left="3.5" Canvas.Top="3.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 13,4C 10,4 7,4 5.5,5.5C 4,7 4,10 4,13"/>
			<Rectangle SnapsToDevicePixels="True" Width="5" Height="13" Canvas.Left="14.5" Canvas.Top="0.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF"/>
			<Rectangle SnapsToDevicePixels="True" Width="13" Height="5" Canvas.Left="0.5" Canvas.Top="14.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF"/>
			<Path SnapsToDevicePixels="True" Width="1" Height="5" Canvas.Left="6.5" Canvas.Top="14.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 7,15L 7,19"/>
			<Path SnapsToDevicePixels="True" Width="5" Height="1" Canvas.Left="14.5" Canvas.Top="6.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 15,7L 19,7"/>
		</Canvas>



Я ещё не разобрался с GuidesLineHelper-ом, о котором Вы писали. Подскажите пожл, как его использовать.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Засада с картинками, опять DPI awareness.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]