C#使用ImageSharp库实现图片垂直翻转的方法
ImageSharp 垂直翻转实现方案
由于Y轴方向倒置需要垂直翻转图片的效果参考如下:
你可以直接调用ImageSharp内置的FlipExtensions提供的API实现需求,不需要手动处理像素转换。
FlipMode 枚举说明
两个枚举值分别对应不同翻转效果:
FlipMode.Vertical:沿水平中轴线做上下翻转,就是你需要的垂直翻转效果,刚好可以修正Y轴倒置问题FlipMode.Horizontal:沿垂直中轴线做左右镜像翻转
代码修改方式
你只需要在Mutate的方法调用链中追加.Flip(FlipMode.Vertical)即可,推荐在完成所有背景、图形绘制之后再调用翻转,不需要额外调整原有路径绘制的坐标逻辑。
另外注意你原有代码里的path.AsClosedPath()写法有问题:这个方法不会修改原路径对象,会返回一个新的闭合路径实例,必须用变量接收返回值,否则填充时路径还是未闭合状态,可能出现渲染异常。
修改后的完整代码如下:
using (MemoryStream outStream = new MemoryStream()) { using (Image img = new Image<Rgba32>(width, height)) { PathBuilder pb = drawPath(); // 绘制所有路径内容 IPath path = pb.Build(); // 接收AsClosedPath返回的闭合路径实例 path = path.AsClosedPath(); img.Mutate(imageContext => imageContext .BackgroundColor(Color.Black) .Fill(Color.Yellow, path) // 追加垂直翻转操作 .Flip(FlipMode.Vertical) ); img.SaveAsPng(outStream); } return File(outStream.ToArray(), "image/png"); }
如果你后续所有绘制逻辑都要适配倒置Y轴,也可以把.Flip(FlipMode.Vertical)放到Mutate调用链的最开头,之后所有绘图操作都会基于翻转后的画布坐标系计算,不需要每次绘制完成后再翻转。
内容的提问来源于stack exchange,提问作者Walle
相关产品推荐
相关产品推荐

