DotNet Core图像抗锯齿在Mac OS X上使用libgdiplus

在Mac上,使用libgdiplus的DotNet Core应用程序不会显示反锯齿。 无论是使用Mono还是CoreCompat System.Drawing.Image,都会发生这种情况。

不完全确定我知道内部; 然而,在Windows上我相信这是使用GDI +,而在Mac上libgdiplus使用开罗。

在PC上(左图),调整后的图像很棒,但在Mac OS X(右侧)上使用完全相同的代码进行别名。

调整

有没有任何见解如何解决macOS目标的这种不兼容问题?

用于调整图像大小的代码:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace DrawingTest
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            var image = Image.FromFile(@"/users/jsturges/master.png");
            var resized = ResizeImage(image, 256, 256);
            resized.Save(@"/users/jsturges/resized-mac.png");
        }

        public static Bitmap ResizeImage(Image image, int width, int height)
        {
            var ratioX = width / (float)image.Width;
            var ratioY = width / (float)image.Height;
            var ratio = Math.Min(ratioX, ratioY);

            var scaleWidth = (int)Math.Floor(image.Width * ratio);
            var scaleHeight = (int)Math.Floor(image.Height * ratio);

            var bitmap = new Bitmap(scaleWidth, scaleHeight, PixelFormat.Format32bppRgb);

            using (var graphics = Graphics.FromImage(bitmap))
            {
                graphics.CompositingMode = CompositingMode.SourceCopy;
                graphics.CompositingQuality = CompositingQuality.HighQuality;
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

                using (var wrapMode = new ImageAttributes())
                {
                    wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                    var rect = new Rectangle(0, 0, scaleWidth, scaleHeight);
                    graphics.DrawImage(image, rect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
                }
            }

            return bitmap;
        }
    }
}

原始图像用于测试此处可用的调整大小操作。


CoreCompat的Frederik Carlier建议添加对以下内容的引用:

  • runtime.osx.10.10-x64.CoreCompat.System.Drawing 1.0.1-beta004
  • 这会复制macOS所需的依赖项,包括解决抗混叠问题的libgdiplus的更新版本。

    目前CoreCompat的解决方法是,CoreCompat的System.Drawing库将在netstandard 2.0发布后更新。

    链接地址: http://www.djcxy.com/p/84151.html

    上一篇: DotNet Core image antialias using libgdiplus on Mac OS X

    下一篇: What is the best way to resize an animated GIF image?