首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >直接将旋转图像绘制到Graphics对象,而无需创建新的位图

直接将旋转图像绘制到Graphics对象,而无需创建新的位图
EN

Stack Overflow用户
提问于 2016-07-08 19:27:46
回答 0查看 2.2K关注 0票数 0

我可以通过在单独的图形对象上绘制来使图像旋转,该图形对象在单独的位图上绘制,然后使用图形对象绘制位图,该图形对象在最终图像上绘制。这是绘制了两幅基本相同的图像。我不想这样。该项目是一个简单的图形引擎,因此绘图时间必须尽可能快。最重要的是,System.Graphics还没有证明在绘制图像方面做得太好。

这是我正在使用的代码。它需要一两个改进,但基本方法应该是可见的。

代码语言:javascript
复制
    public static System.Drawing.Bitmap rotatedImage(System.Drawing.Bitmap img, double deg, bool hq)
    {
        int diag = (int)Math.Round(Math.Sqrt(img.Width * img.Width + img.Height * img.Height));
        System.Drawing.Bitmap res = new System.Drawing.Bitmap(diag, diag);
        System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(res);
        if (hq) gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        DoublePair rotCent = new DoublePair(diag / 2, diag / 2);
        gfx.TranslateTransform((float)rotCent.a, (float)rotCent.b);
        gfx.RotateTransform((float)deg);
        gfx.TranslateTransform((-1) * (float)rotCent.a, (-1) * (float)rotCent.b);
        gfx.DrawImage(img, (diag - img.Width) / 2, (diag - img.Height) / 2, img.Width, img.Height);
        return res;
    }

在新的位图上绘制旋转的图像需要旋转用于绘制的图形对象。我能做的是将主图形对象传递给该方法,旋转它以绘制图像,然后旋转回该对象。但我不知道为大图像旋转图形比为小图像旋转图形更快还是更慢。

那么,哪个更快-旋转整个图形对象两次(旋转以绘制图像,然后旋转回来),还是使用单独的图形绘制旋转后的图像,然后使用主图形对象绘制它?是否有无需使用单独的图形对象和无需旋转图形对象即可旋转图像的选项?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38265506

复制
相关文章

相似问题

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