我的应用程序中已经有一个WPF
Image
控件。使用ScaleTransform
和TranslateTransform
,该Image
控件具有很好的缩放和平移功能。
我想知道是否有任何方法可以使用and在Image
控件中显示图像源的某些矩形区域。为此,我想我需要在控件的视口中获取/设置图像源的矩形坐标。但似乎我找不到任何关于此的参考。ScaleTransform
TranslateTransform
Image
我认为CroppedBitmap可以帮助你:
<CroppedBitmap x:Key="croppedImage"
Source="{StaticResource masterImage}" SourceRect="30 20 105 50"/>
对我来说幸运的是,矩形的大小都相同,因此我可以轻松找到 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;
}