Tôi có hình ảnh được hiển thị lớn và cần một phần được thu nhỏ về những gì dưới con trỏ của người dùng.Làm thế nào để xây dựng một kính lúp trong WPF C# 4.0?
Hình ảnh của tôi là bên trong một lưới điện và được định nghĩa trong XAML theo cách này:
<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>
Và tôi có một khu vực zoom nơi sẽ xuất hiện hình ảnh dưới con trỏ của tôi thu nhỏ 2x.
<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>
Bây giờ, trong mã .cs của tôi, tôi đã có những chức năng đó sẽ hiển thị hình ảnh thu nhỏ:
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;
}
Làm thế nào tôi có thể tìm thấy giá trị chính xác của những "?????? ?? "
translate.X = -x * 10/(size.Width/400);
translate.Y = -y * 10/(size.Height/90);
Nó hiển thị hình ảnh chính xác, được thu nhỏ nhưng không hiển thị khu vực hình ảnh bên dưới con trỏ của tôi.
Xin cảm ơn trước.
Làm thế nào để kiểm tra mã trong github và nó sẽ được lập chỉ mục trong trường hợp mọi người tìm kiếm? – Candide
Chắc chắn. Đã cập nhật liên kết. –