I have an image made large and you need an enlarged section of what's under the user cursor.
My image is inside the grid and defined in XAML as follows:
<Grid x:Name="RootImgGrid" Background="#FF333333" > <Viewbox x:Name="imgViewBox" Margin="1,1,1,1" Stretch="Fill" > <Canvas x:Name="imgCanvas" ClipToBounds="True" Width="{Binding ElementName=RootImgGrid, Path=ActualWidth}" Height="{Binding ElementName=RootImgGrid, Path=ActualHeight}"> <Image x:Name="imgObj" MouseWheel="img_MouseWheel" Cursor="Hand" MouseMove="Img_MouseMove" MouseDown="Img_MouseDown" MouseUp="Img_MouseUp" > <Image.RenderTransform> <TransformGroup x:Name="imgTransformGroup"> <ScaleTransform x:Name="imgScaleTransform"></ScaleTransform> <TranslateTransform x:Name="imgTranslateTransform"></TranslateTransform> </TransformGroup> </Image.RenderTransform> <Image.LayoutTransform> <RotateTransform x:Name="imgRotateTransform"></RotateTransform> </Image.LayoutTransform> </Image> </Canvas> </Viewbox> </Grid>
And I have an enlarged area where the image should be displayed under my cursor, enlarged 2 times.
<Viewbox x:Name="imgViewBoxMagnifier" Width="400" Height="90"> <Canvas x:Name="imgCanvasMagnifier" Width="400" Height="90"> <Canvas.Clip> <RectangleGeometry Rect="0,0,400,90" /> </Canvas.Clip> <Image x:Name="imgMagnifier" Margin="2" Width="400" Height="90"> <Image.RenderTransform> <TransformGroup x:Name="imgMagnifierTransformGroup"> <ScaleTransform x:Name="imgMagnifierScaleTransform"></ScaleTransform> <TranslateTransform x:Name="imgMagnifierTranslateTransform"></TranslateTransform> </TransformGroup> </Image.RenderTransform> <Image.LayoutTransform> <RotateTransform x:Name="imgMagnifierRotateTransform"></RotateTransform> </Image.LayoutTransform> </Image> </Canvas> </Viewbox>
Now, in my .CS code, I have a function that should show a larger image:
public void Magnifier(Canvas imgCanvas, Image imgObject, Image imgMagnifier, MouseEventArgs e) { Int32 width = 400; Int32 height = 90; if (imgMagnifier.Source != imgObject.Source) { imgMagnifier.Source = imgObject.Source; } Size size = imgObject.RenderSize; RotateTransform rt = (RotateTransform)imgObject.LayoutTransform; TranslateTransform tt = (TranslateTransform)((TransformGroup)imgObject.RenderTransform).Children[1]; ScaleTransform st = (ScaleTransform)((System.Windows.Media.TransformGroup)(imgObject.RenderTransform)).Children[0]; Double x = e.GetPosition(imgCanvas).X - tt.X; Double y = e.GetPosition(imgCanvas).Y - tt.Y; Point pos = e.MouseDevice.GetPosition(imgCanvas); TransformGroup transformGroup = new TransformGroup(); ScaleTransform scale = new ScaleTransform(); scale.CenterX = x; scale.CenterY = y; scale.ScaleX = st.ScaleX * 10; scale.ScaleY = st.ScaleY * 10; transformGroup.Children.Add(scale); TranslateTransform translate = new TranslateTransform(); translate.X = ??????????????????; translate.Y = ??????????????????; transformGroup.Children.Add(translate); imgMagnifier.RenderTransform = transformGroup; }
How can I find the correct meaning of these "????????"
translate.X = -x * 10 / (size.Width / 400); translate.Y = -y * 10 / (size.Height / 90);
It displays the correct image, enlarged, but it does not display the area of ββthe image under my cursor.
Thanks in advance.