Изображение, добавленное в холст WPF, изменяет размер - PullRequest
3 голосов
/ 24 января 2012

Как часть приложения, у меня есть объект холста <Canvas Name="canvas"/>, в который я пытаюсь вставить компоненты часов следующим образом

// Add Background
Image bg = new Image();
bg.SetValue(Canvas.ZIndexProperty, 0);
bg.Source = new BitmapImage(new Uri("images/background.png", UriKind.Relative));
canvas.Width = bg.Source.Width;
canvas.Height = bg.Source.Height;
canvas.Children.Add(bg);

// Add second hand
Image hand = new Image();
hand.SetValue(Canvas.ZIndexProperty, 10);
hand.Source = new BitmapImage(new Uri("images/hand.png", UriKind.Relative));
canvas.Children.Add(hand);

Первое изображение (bg) отображается правильно, но второе (рука) выглядит масштабированным (исходный размер составляет 5 x 61 пиксель, при опросе размер изображения после создания показывает, что оно стало 6,66 x 84,02 единиц отображения) (оригинал bg составляет 130 x 130 пикселей и отображается как 130,4 в единицах дисплея)

Все ответы на мой запрос, которые я могу найти (StackOverflow и Google), предполагают настройку DPI для изображения, но оба моих изображения имеют разрешение 96 DPI (согласно Paint). Я попытался переместить объявления изображений в XAML (не долгосрочное решение), но это не имеет значения. Я попытался изменить порядок, в котором я вставляю изображения без эффекта. Я явно установил ширину / высоту холста в XAML - никакого эффекта. Я установил размер изображения явно - опять нет эффекта.

Кто-нибудь может сказать мне, что происходит?

добавлено: скомпилировано с использованием .net 4 на windows7 64bit

Решено: Paint сообщает о неверной настройке DPI для изображения. Paint.Net дал мне правильное значение, и, изменив его на 96 DPI, проблема была решена

Ответы [ 2 ]

1 голос
/ 25 января 2012

Устранена проблема: Paint сообщал о неверном DPI. Использование альтернативного пакета рисования (Paint.net) показало, что DPI было другим. Исправление этого параметра устранило проблему.

0 голосов
/ 24 января 2012

Вы не установили Width и Height для второго изображения, и это, вероятно, вызвало проблему.Вы также можете попытаться отключить растяжение изображения, добавив строку (это, по крайней мере, не должно масштабировать изображение, даже если масштабируется элемент управления):

hand.Stretch = Stretch.None;

Обновление : я имеютолько что заметил, что вы уже пытались установить размеры изображения.Попробуйте установить if в коде.В настоящее время я ищу другие возможные причины этой проблемы.

Обновление II : Я вижу, что вы нашли решение.Я рад, что ты заставил это работать:).

...