通过屏幕分辨率剪切图像

时间:2012-02-11 16:17:58

标签: c# wpf image grid screen-resolution

我正在困扰一个奇怪的问题。 我正在将图像应用于网格,它通过屏幕重新分解来切割图像,而不是逻辑上。 在1280 x 800它显示如下: link to image

当它是800 x 600时,它显示如下: link to image

有点混乱,因为较低的高度分辨率,它显示更多的图片。 知道为什么会发生什么事吗? 这是我的代码:

Grid MyGrid = new Grid();
Image img = new Image();

StackPanel myStackPanel = new StackPanel();
myStackPanel.CanVerticallyScroll = true;

Image myImage = new Image();
BitmapImage myImageSource = new BitmapImage();
myImageSource.BeginInit();
myImageSource.UriSource = new Uri("C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg");
myImageSource.EndInit();
myImage.Source = myImageSource;
// myImage.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
// myImage.VerticalAlignment = System.Windows.VerticalAlignment.Center;
// myStackPanel.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
// myStackPanel.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;

myStackPanel.Children.Add(myImage);

MyGrid.Children.Add(myStackPanel);

_LayoutRoot.Children.Add(MyGrid);

2 个答案:

答案 0 :(得分:3)

问题:

myStackPanel.Children.Add(myImage);

如果你想要正确调整图像大小,请不要使用StackPanel(如果它不包含任何其他内容,为什么还有StackPanel?),这里只会溢出并剪切。还有其他各种panels,例如Grids,更适合此。

答案 1 :(得分:2)

该程序正是您告诉它的。您正在使用StackPanel,这意味着其中的所有项目都将“堆叠”。默认情况下,StackPanel的方向是垂直的,这意味着第二个控件位于第一个控件下方,第三个控件位于第二个控件下方等等。所有这些控件都使用了所有可用的宽度。

在您的情况下,这意味着图像被拉伸到窗口的宽度。如果它的高度不合适,底部将被切断。或者,如果窗口的高度太大,您会在图像下方看到空白区域。

最简单的方法是不要让窗口最大化并尝试更改窗口的大小。

如果您不想要此行为,可以使用不同的面板,例如Grid,作为H.B.建议。