前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF图片(Image)或布局的缩放和旋转(TransformGroup与Transform)

WPF图片(Image)或布局的缩放和旋转(TransformGroup与Transform)

作者头像
码客说
发布2024-06-01 10:22:05
1290
发布2024-06-01 10:22:05
举报
文章被收录于专栏:码客码客

同时缩放和旋转

在做缩放和旋转的时候 我们可以使用两种方式

  • 目标本身的旋转和缩放
  • 使用Transform旋转和缩放

因为我这里还有画板,并且画板和图片要始终对应,所以使用Transform相对就比较简单。

注意

不要两种方式并存,比如缩放是改的目标本身的宽高,而旋转使用Transform,会导致实际效果和预期不符。

布局

代码语言:javascript
复制
<Grid
    Name="OuterGrid"
    ClipToBounds="True">
    <Grid
        x:Name="MGridImage"
        VerticalAlignment="Center"
        HorizontalAlignment="Center"
        RenderTransformOrigin="0.5,0.5">
        <Image
            Margin="0,0,0,0"
            Stretch="Uniform"
            Source="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:UcBlackbord}}, Path=AnsPic}">
        </Image>
        <InkCanvas
            x:Name="BlackboardCanvas"
            Background="Transparent" />
    </Grid>
</Grid>

其中

RenderTransformOrigin="0.5,0.5"保证旋转的时候是按照中心旋转的。

代码

代码语言:javascript
复制
private double _rotationAngle;

private void RotateGrid()
{
    _rotationAngle += 90;
    if (_rotationAngle - 360 == 0)
    {
        _rotationAngle = 0;
    }
    TransformAction();
}

private void ZoomGrid()
{
    if (OuterGrid.ActualWidth != 0)
    {
        TransformAction();
    }
}

private void TransformAction()
{
    double zoom = _pageData.Zoom;
    ScaleTransform scaleTransform = new ScaleTransform(zoom, zoom);
    RotateTransform rotateTransform = new RotateTransform(_rotationAngle);
    TransformGroup transformGroup = new TransformGroup();
    transformGroup.Children.Add(scaleTransform);
    transformGroup.Children.Add(rotateTransform);
    MGridImage.RenderTransform = transformGroup;
}

放大

代码语言:javascript
复制
if (_pageData.Zoom < 2)
{
    _pageData.Zoom += 0.2;
}
ZoomGrid();

缩小

代码语言:javascript
复制
if (_pageData.Zoom > 0.6)
{
    _pageData.Zoom -= 0.2;
}
ZoomGrid();

只旋转

代码语言:javascript
复制
private double _rotationAngle = 90;
RotateTransform rotateTransform = new RotateTransform(_rotationAngle);
MGridImage.RenderTransform = rotateTransform;

只缩放

代码语言:javascript
复制
private double zoom = 1.2;
ScaleTransform scaleTransform = new ScaleTransform(zoom, zoom);
MGridImage.RenderTransform = scaleTransform;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 同时缩放和旋转
  • 只旋转
  • 只缩放
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档