2016-03-11 59 views
0

我试图适合我的屏幕范围内的多个图像。我正在使用堆栈面板,看到这是我最终目标的最佳布局。 应该打开来自用户本地机器的图像并将其添加到堆栈面板,直到没有更多的屏幕空间可用。C#问题采购图像大小 - WPF

我正在运行的问题是,当我将我的位图加载到内存中时,它向我提供了一个不准确的宽度(它提供了DPI宽度,但我希望它在屏幕上保留的最终宽度)。理想情况下,如果你的屏幕宽度是1000我会想要加载图像,直到1000或近1000宽度已经在屏幕上使用,这是困难的,如果我不能源的图像的宽度(类似于什么窗口会给我的宽度,如果我看着在资源管理器的文件)

我使用下列位图加载到内存中:

  BitmapImage bitmap = new BitmapImage(); 
      bitmap.BeginInit(); 
      bitmap.UriSource = new Uri(fullFilePath, UriKind.Absolute); 
      bitmap.EndInit(); 
      MessageBox.Show(bitmap.Height.ToString() + "is the height. this is the width->" + bitmap.Width.ToString()); 

我得到的结果是: 1728是高度
1152是宽度

实际上是864 x 1296(jpg图像) 。

这些图像是在一个堆栈面板中,是否可以提取特定堆栈面板子的大小? 例子stackpannel.children[0].width有什么影响?

回答

0

至于BitmapImage,要获得其原始图像大小,请检查PixelWidthPixelHeight而不是WidthHeight。这是因为WidthHeight值是使用元数据中包含的分辨率信息进行调整的。

例如,如果原来的宽度是864和X包含在Exif数据中分辨率是72,因为WPF的标准DPI是96,Width将七十二分之八百六十四* 96 = 1152

+0

优秀的感谢,你知道一种方式,我可以找出它有多大,最终在屏幕上?我愿意使用网格作为其父项或任何其他方法,这样可以让我在总体上获得图片宽度/高度或堆叠面板堆栈的准确性。 – ModS

+0

要获取“Grid”或“Image”控件的实际渲染大小,请参阅其“ActualWidth”和“ActualHeight”。请注意,除非您设置应用程序的DPI知晓度,否则这些值在每个显示器DPI环境下可能不相关。 – emoacht