RenderTargetBitmap и DPI

Я не понимаю, почему параметры DPI на RenderTargetBitmap используются так, как кажется. Довольно часто я вижу код, который имеет дело с нестандартными настройками DPI, настраивая размер изображения на основе DPI следующим образом:

new RenderTargetBitmap ((int) (width/96d)*dpi, (int) (height/96d)*dpi, dpi, dpi, PixelFormats.Pbgra32);

Примеры:

http://blogs.msdn.com/b/jaimer/archive/2009/07/03/rendertargetbitmap-tips.aspx (через web.archive.org)

ContentControl + RenderTargetBitmap + пустое изображение

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/984da366-33d3-4fd3-b4bd-4782971785f8/

В других случаях кажется, что dpi жестко запрограммировано либо на 96, либо на другие значения, например:

new RenderTargetBitmap (width, height, 96, 96, PixelFormats.Pbgra32);

Примеры:

http://www.i-programmer.info/programming/wpf-workings/538-rendertargetbitmap-visual-vector-to-bitmap.html

http://www.ericsink.com/wpf3d/3_Bitmap.html

http://dedjo.blogspot.com/2008/05/performance-appliance-of.html

Как визуализировать отмеченный CheckBox (тема Aero) в RenderTargetBitmap?

or

new RenderTargetBitmap (width, height, 120, 96, PixelFormats.Pbgra32);

Примеры:

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx

Когда бы вы сделали одно, а одно другое?

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

И что вам, вероятно, следует использовать фиксированное разрешение 96 при сохранении в файл или, если вы используете другое разрешение, не регулируйте ширину и высоту?

Скажем, я хочу сохранить изображение элемента управления в файл фиксированного размера. Мог бы я тогда по-прежнему устанавливать dpi или просто использовать значение по умолчанию 96?


person Patrick Klug    schedule 20.04.2011    source источник


Ответы (1)


Значение по умолчанию 96 - это просто самый общий / используемый dpi для дисплеев рабочего стола. Но это будет / может измениться.

Если вы знаете, какое dpi должно иметь растровое изображение во время компиляции вашей программы, вы можете установить для него желаемое значение (например, 96). Честно говоря, я бы использовал для этого константу, но это сводится к следующему. к тому же во время выполнения.

Если вы не знаете, в каком разрешении потребуется изображение, вам не следует жестко кодировать dpi.

Кстати: убедитесь, что вы всегда правильно устанавливаете dpi изображения.

person Emond Erno    schedule 20.04.2011
comment
Я не уверен, что понимаю вас. Конечно, я знаю, какой DPI использует система. Кроме того, я думаю, что вполне нормально не предполагать, что фактическое системное dpi равно 96. Мой вопрос заключается в том, когда можно игнорировать системное dpi, и когда / почему вы захотите настроить размер изображения на основе dpi. . как уже упоминалось, иногда люди, кажется, настраивают размер изображения на основе dpi, а иногда нет. - person Patrick Klug; 20.04.2011
comment
Я думаю, вы делаете ложное предположение: разрешение изображения не имеет ничего общего с текущим системным разрешением. Разрешение изображения определяет, как следует использовать / понимать данные изображения. - person Emond Erno; 20.04.2011