C# Проблема с размером исходного изображения — WPF

Я пытаюсь разместить несколько изображений в пределах моего экрана. Я использую панель стека, видя, что это лучший макет для моей конечной цели. Изображения с локального компьютера пользователя следует открывать и добавлять в панель стека до тех пор, пока на экране не останется места для работы.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я загружаю свое растровое изображение в память, оно предоставляет мне неточную ширину (она обеспечивает ширину DPI, однако мне нужна окончательная ширина, которую она держит на экране). в идеале, если ширина вашего экрана составляет 1000, я бы хотел загружать изображения до тех пор, пока на экране не будет использована ширина 1000 или около 1000, что сложно, если я не могу получить ширину изображения (аналогично тому, что окна дали бы мне для ширины, если я посмотрел файл в проводнике)

Я использую следующее для загрузки растрового изображения в память:

          BitmapImage bitmap = new BitmapImage();
          bitmap.BeginInit();
          bitmap.UriSource = new Uri(fullFilePath, UriKind.Absolute);
          bitmap.EndInit();
          MessageBox.Show(bitmap.Height.ToString() + "is the height. this is the width->" + bitmap.Width.ToString());

Результаты, которые я получаю: 1728 — высота
1152 — ширина

для изображения, которое на самом деле 864 x 1296 (изображение в формате jpg).

Эти изображения находятся в панели стека, можно ли извлечь размер определенного дочернего элемента панели стека? Пример stackpannel.children[0].width Что-то в этом роде?


person ModS    schedule 11.03.2016    source источник


Ответы (1)


Что касается BitmapImage, чтобы получить исходный размер изображения, отметьте PixelWidth и PixelHeight вместо Width и Height. Это связано с тем, что значения Width и Height корректируются с помощью информации о разрешении, содержащейся в метаданных.

Например, если исходная ширина равна 864, а разрешение X, содержащееся в данных Exif, равно 72, поскольку стандартный DPI WPF равен 96, Width будет 864/72 * 96 = 1152.

person emoacht    schedule 13.03.2016
comment
Отлично, спасибо. Знаете ли вы, как я могу узнать, насколько большим он окажется на экране? Я готов использовать сетку в качестве ее родителя или любые другие средства, которые позволили бы мне получить точную ширину/высоту изображений или стеков панелей стека в целом. - person ModS; 15.03.2016
comment
Чтобы получить фактический отображаемый размер элемента управления Grid или Image, обратитесь к его ActualWidth и ActualHeight. Обратите внимание, что эти значения могут быть неверными в среде DPI для каждого монитора, если вы не настроите поддержку DPI для своего приложения. - person emoacht; 16.03.2016