Я выполняю масштабирование изображения, после масштабирования мне нужно найти текущие видимые границы (то есть) границы увеличенной области.
Поскольку мне нужно добавить еще один элемент (прямоугольник или любую форму) в центреизображения, поэтому даже после панорамирования его следует добавить в центр увеличенного изображения.
Необходимо найти границы, отмеченные на изображении.
Увеличенное изображение
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<ScrollViewer HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Disabled" >
<Grid x:Name="grid1" Background="AliceBlue" MouseLeftButtonDown="Grid1_MouseDown"
MouseMove="Grid1_MouseMove" MouseLeftButtonUp="Grid1_MouseLeftButtonUp">
<Image x:Name="image1" Source="2.bmp"></Image>
</Grid>
</ScrollViewer>
<Grid Grid.Row="1" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Slider Width="500" x:Name="slider" ValueChanged="Slider_ValueChanged" Minimum="-50" Maximum="400" Value="100" TickFrequency="10"></Slider>
<TextBlock Grid.Column="1" Text="{Binding ElementName=slider, Path=Value}"></TextBlock>
</Grid>
MatrixTransform zoomMatrixTransform;
Point start;
Point origin;
Matrix matrix;
private void Slider_ValueChanged(object sender,
RoutedPropertyChangedEventArgs<double> e)
{
var zoomLevel = e.NewValue;
var factor = zoomLevel / 100;
Matrix matrix = Matrix.Identity;
matrix.Scale(factor, factor);
image1.RenderTransformOrigin = new Point(0.5, 0.5);
zoomMatrixTransform = new MatrixTransform(matrix);
image1.RenderTransform = zoomMatrixTransform;
}
private void Grid1_MouseDown(object sender, MouseButtonEventArgs e)
{
start = e.GetPosition(grid1);
origin = new Point(zoomMatrixTransform.Matrix.OffsetX, zoomMatrixTransform.Matrix.OffsetY);
image1.CaptureMouse();
}
private void Grid1_MouseMove(object sender, MouseEventArgs e)
{
if (!image1.IsMouseCaptured) return;
Point p = e.MouseDevice.GetPosition(image1);
var rect2 = new Rect(image1.RenderSize);
var bounds =
image1.TransformToAncestor(grid1).TransformBounds(rect2);
matrix = zoomMatrixTransform.Matrix;
Vector v = start - e.GetPosition(grid1);
matrix.OffsetX = origin.X - v.X;
matrix.OffsetY = origin.Y - v.Y;
zoomMatrixTransform.Matrix = matrix;
image1.RenderTransformOrigin = new Point(0.5, 0.5);
image1.RenderTransform = zoomMatrixTransform;
}
private void Grid1_MouseLeftButtonUp(object sender,
MouseButtonEventArgs e)
{
image1.ReleaseMouseCapture();
}