为什么这个位图图像在我加载后改变了它的大小?

Why this Bitmap Image changes its size after I load it?

快速提问:

我有这张 1000 x 1000 位图图像:

我使用这个例程来加载它:

private BitmapSource initialBitmap = new BitmapImage(new Uri("C:\Users\...\Desktop\Original.bmp"));

为什么在我加载它之后,在我跨过上面那行之后,我看到它是 800 x 800?

P.S 我希望它是 1000 x 1000 并且不使用任何调整大小功能。它正在运行,突然变成 800*800 !

这是设计使然。注意 MSDN documentation 代表 BitmapSource.Width/Height:

Gets the width of the bitmap in device-independent units (1/96th inch per unit). (Overrides ImageSource.Width.)

您应该使用 PixelWidth / PixelHeight 属性:

Gets the width of the bitmap in pixels.

一个相当令人困惑的选择或条款,imo,但是你去了..

BitmapSource.Width and BitmapSource.Height 返回的值不是以像素为单位,而是 WPF 的设备独立单位,始终为 96 dpi。例如:

Gets the width of the bitmap in device-independent units (1/96th inch per unit).

如果你想知道实际的像素宽度和高度,你需要使用PixelWidth and PixelHeight属性。

您的问题不是很具体,但如果您真正关心的是让位图以与创作时相同的尺寸显示,那么最简单的解决方案是确保以 96 dpi 创作它.无论您使用什么程序来创作位图,都可能有一个可以设置位图分辨率的地方。通常这可以设置为改变或不改变图像的像素尺寸(即缩放图像更大或更小);您想在不缩放图像的情况下执行此操作,以便像素尺寸保持不变,但 dpi 会发生变化以匹配 WPF 使用的内容。

请注意,这仍然不能保证位图以特定像素大小显示。显示分辨率可以并且经常不同于 96 dpi,在这种情况下,WPF 将缩放图像以确保图像的物理尺寸(即以英寸、毫米等为单位的尺寸)根据位图中的信息是正确的.例如,在 96 dpi 下 960 像素宽表示 10" 宽。在 120 dpi 显示器上,这意味着显示足够大的位图,使其宽度使用 1200 个显示像素。

如果您希望或需要位图以完全相同的显示像素数显示,而不管显示分辨率如何,那么您必须在显示图像的位置设置一个变换,以反转缩放效果WPF 否则会这样做。当然,这需要知道显示分辨率。


以下是一些您可能会觉得有用的其他相关 Stack Overflow 问题: RenderTargetBitmap renders image of a wrong size
WPF for LCD screen Full HD
Screen Resolution Problem In WPF?