RenderTargetBitmap和DPI

27

我不理解为什么在RenderTargetBitmap上使用DPI参数的方式是这样的。 经常看到的代码处理非标准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 + empty image

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

如何将已选择的复选框(Aero主题)呈现为RenderTargetBitmap?

或者

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

示例:

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

什么时候使用第一种方法?什么时候使用第二种方法?

如果您之后想要在应用程序中以与控件相同的大小显示图像,那么我是否正确地说,您应该始终调整位图的大小(如第一个示例中所示)?

而且,保存到文件时应使用固定的96 DPI,或者如果使用不同的DPI,则不需要调整宽度和高度?

假设我想将控件的图像保存到固定大小的文件中。 我是否仍然需要设置DPI,还是只需要使用默认值96?

1个回答

3
默认的96是桌面显示器最普遍/常用的dpi。但这可能会改变。
如果您在编译程序时知道位图必须具有的dpi值,可以将其设置为所需值(例如96)。说实话,我会使用常量来做到这一点,但在运行时它归结为相同的事情。
如果您不知道需要图像的分辨率,则不应硬编码dpi。
顺便说一下:请确保始终正确设置图像的dpi。

我不确定我理解你的意思。当然,我知道系统使用的DPI是多少。而且,我认为假设实际系统dpi为96并不是很正常。我的问题是,在什么情况下可以忽略系统dpi以及何时/为什么要根据dpi调整图像大小。有时人们似乎会根据dpi调整图像大小,而其他时候则不会。 - Patrick Klug
2
我认为你有一个错误的假设:图像的dpi与当前系统的dpi无关。图像的dpi指定了如何使用/理解图像中的数据。 - Emond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接