首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageSharp放置旋转图像

使用ImageSharp放置旋转图像
EN

Stack Overflow用户
提问于 2019-07-03 08:47:15
回答 1查看 985关注 0票数 0

我试图旋转(围绕它的中心),并将一个图像放在另一个图像的上方。

旋转后,我所期望的XY坐标是错误的。

请举例说明如何做到这一点。

当前绘制调试帧而不是图像。

我的坐标系是基于位置的中心位置,但是我可以切换到XY坐标的左上角位置

代码语言:javascript
复制
private static void DrawDebugFrames(List<LogoPlacementContentDto> placements, Image<Rgba32> mutatedImage)
{
    foreach (var placement in placements)
    {
        var width = placement.Width;
        var height = placement.Height;

        using (var logo = new Image<Rgba32>(Configuration.Default, width, height))
        {
            var centerX = placement.X; // center of imagePlacement
            var centerY = placement.Y; // center of imagePlacement

            var affineBuilder = new AffineTransformBuilder();
            affineBuilder.PrependTranslation(new Vector2(centerX, centerY));
            affineBuilder.PrependRotationDegrees(placement.Rotation);

            logo.Mutate(
                x => x
                    .BackgroundColor(Rgba32.Beige).DrawPolygon(
                        Rgba32.HotPink,
                        4,
                        new Vector2(0, 0),
                        new Vector2(width, 0),
                        new Vector2(width, height),
                        new Vector2(0, height)
                    )
                    .Transform(affineBuilder)
            );

            mutatedImage.Mutate(
                x => x
                    .DrawImage(logo, new Point(-(width / 2), -(height / 2)), GraphicsOptions.Default)
            );
        }
    }
}

(图像) 预期结果(编辑)

(图像) 结果

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-04 11:52:31

我解决了这个问题。

问题是客户端从未发送过边界框的XY坐标。相反,我尝试使用左上角的XY或XY的中间位置。

用这个固定的。我稍微调整了代码,以反映这一变化。

代码语言:javascript
复制
private static void DrawDebugFrames(List<LogoPlacementContentDto> placements, Image<Rgba32> mutatedImage)
{
    foreach (var placement in placements)
    {
        var width = placement.WidthInt;
        var height = placement.HeightInt;

        using (var logo = new Image<Rgba32>(Configuration.Default, width, height))
        {
            var positionX = placement.Position.X;
            var positionY = placement.Position.Y;

            var affineBuilder = new AffineTransformBuilder();

            affineBuilder.PrependTranslation(new Vector2(positionX, positionY));
            affineBuilder.PrependRotationDegrees(placement.Rotation);
            affineBuilder.AppendTranslation(new Vector2(-positionX, -positionY));

            logo.Mutate(
                x => x
                    .BackgroundColor(Rgba32.Beige).DrawPolygon(
                        Rgba32.HotPink,
                        4,
                    new Vector2(0, 0),
                    new Vector2(width, 0),
                    new Vector2(width, height),
                    new Vector2(0, height)
                    )
                    .Transform(affineBuilder)
            );

            mutatedImage.Mutate(
                x => x
                    .DrawImage(logo, new Point(placement.Position.XInt, placement.Position.YInt), GraphicsOptions.Default)
            );
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56866248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档