Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Mac OS X上使用libgdiplus的DotNet核心映像反别名_C#_Graphics_Mono_.net Core_Antialiasing - Fatal编程技术网

C# 在Mac OS X上使用libgdiplus的DotNet核心映像反别名

C# 在Mac OS X上使用libgdiplus的DotNet核心映像反别名,c#,graphics,mono,.net-core,antialiasing,C#,Graphics,Mono,.net Core,Antialiasing,使用libgdiplus的DotNet核心应用程序在Mac上不会显示抗锯齿。无论是使用Mono还是System.Drawing.Image,都会发生这种情况 不完全确定我是否了解内部结构;然而,在Windows上,我相信这是使用GDI+,而在Mac上,libgdiplus使用Cairo 在PC(左)上,调整大小后的图像很好,但在Mac OS X(右)上使用了完全相同的代码 对于如何解决macOS目标的这种不兼容性,有什么见解吗 用于调整图像大小的代码: using System; using

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

不完全确定我是否了解内部结构;然而,在Windows上,我相信这是使用GDI+,而在Mac上,libgdiplus使用Cairo

在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建议添加以下参考:

这将复制macOS所需的依赖项,包括解决反别名问题的更新版libgdiplus


当前CoreCompat的一个解决方案是系统。一旦netstandard 2.0发布,CoreCompat的绘图库将被更新。

CoreCompat使用Mono源,因此是的,结果应该是相同的,即使是坏的…;-)在质量方面,我会避免使用libgdiplus,而使用其他任何东西。。。如果质量/速度是一个关键问题,我强烈推荐
Magick.NET
SkiaSharp
。。。它们都使用依赖于平台的本地lib,而且速度很快(谷歌的Skia尖叫,但有人说Magick的“质量”更好)
ImageSharp
是一个纯基于CIL的系统,速度较慢,但质量很好。@Sushingover感谢这些建议-我将两者进行比较。仅供参考:MS的好博文: