【问题标题】:Why this Bitmap Image changes its size after I load it?为什么这个位图图像在我加载后会改变它的大小?
【发布时间】:2016-08-24 15:51:44
【问题描述】:

快速提问:

我有这个 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!

【问题讨论】:

    标签: c# bitmap bitmapsource


    【解决方案1】:

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

    以与设备无关的单位(每单位 1/96 英寸)获取位图的宽度。

    如果你想知道实际的像素宽度和高度,你需要使用PixelWidth和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?

    【讨论】:

      【解决方案2】:

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

      以与设备无关的单位(1/96 英寸)获取位图的宽度 每单位)。 (覆盖 ImageSource.Width。)

      您应该使用 PixelWidth / PixelHeight 属性:

      获取位图的宽度(以像素为单位)。

      一个相当令人困惑的选择或术语,imo,但你去吧..

      【讨论】:

        猜你喜欢
        • 2015-08-31
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 2014-04-11
        • 2021-12-08
        • 2016-08-13
        相关资源
        最近更新 更多