Другой результат при использовании RenderTargetBitmap

У меня есть сетка (wpf), и я хочу сохранить сетку как изображение. Имя сетки — gridPrintPanel (ШxВ: 1800x1200). Я попытался использовать RenderTargetBitmap для получения данных и сохранения в виде файла:

string tempFile = @"D:\temp.png";
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(1800, 1200, 0, 0, PixelFormats.Pbgra32);
renderTargetBitmap.Render(ViewInstance.gridPrintPanel);

PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
using (Stream fileStream = File.Create(tempFile))
{
      pngImage.Save(fileStream);
}

Проблема в том, что изображение результата отличается, когда я запускаю программу на 2 разных машинах с разным разрешением экрана. Машина с экраном Full HD дает ожидаемый результат, однако другая машина с разрешением экрана 1024x768 дает изображение с меньшим объемом данных. Моя сетка содержит сетку данных, а вторая машина дает мне сетку данных, которая потеряла несколько последних строк. Вопрос, который я хочу задать здесь: может ли разрешение экрана повлиять на результат? И как я мог получить тот же результат, то есть полное изображение на обеих машинах.


person Voldemort    schedule 11.08.2015    source источник


Ответы (1)


Проблема в разнице разрешения между двумя экранами. Когда я попытался изменить размер сетки до 3600x2400; обе машины дают неожиданные результаты (пропущенные данные). Временное решение этой проблемы: я изменяю размер сетки до 900x600 и при рендеринге изображения (потому что это векторное изображение) меняю dpi на 192d.

RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(1800, 1200, 192d, 192d, PixelFormats.Pbgra32);
person Voldemort    schedule 13.08.2015