我的WPF
Image
控件已在我的应用程序中运行。使用ScaleTransform
和TranslateTransform
,Image
控件的缩放和平移功能非常有效。
我想知道是否有任何方法可以使用Image
和ScaleTransform
在TranslateTransform
控件中显示图像源的某个矩形区域。为了做到这一点,我想我需要在Image
控件的视口中获取/设置图像源的矩形坐标。但似乎我找不到任何关于此的参考。
答案 0 :(得分:3)
我认为CroppedBitmap可以帮助您:
<CroppedBitmap x:Key="croppedImage"
Source="{StaticResource masterImage}" SourceRect="30 20 105 50"/>
答案 1 :(得分:0)
幸运的是,矩形具有相同的大小,因此我可以轻松找到ScaleTrensformation的固定比例值,例如5.0,它将每个矩形适合视图端口。一旦确定,我可以提出以下函数来计算TranslateTransform的值,就图像中的坐标而言。希望它可以帮助处于类似情况的人。
public void SetImageCoordinate(double x, double y)
{
TransformGroup transformGroup = (TransformGroup)image.RenderTransform;
ScaleTransform transform = (ScaleTransform)transformGroup.Children[0];
ImageSource imageSource = image.Source;
BitmapImage bitmapImage = (BitmapImage) imageSource ;
//Now since you got the image displayed in Image control. You can easily map the mouse position to the Pixel scale.
var pixelMousePositionX = -(x ) / bitmapImage.PixelWidth * transform.ScaleX * image.ActualWidth;
var pixelMousePositionY = -(y) / bitmapImage.PixelHeight * transform.ScaleY * image.ActualHeight;
//MessageBox.Show("X: " + pixelMousePositionX + "; Y: " + pixelMousePositionY);
var tt = (TranslateTransform)((TransformGroup)image.RenderTransform).Children.First(tr => tr is TranslateTransform);
tt.X = pixelMousePositionX;
tt.Y = pixelMousePositionY;
}