C# 在Mac OS X上使用libgdiplus的DotNet核心映像反别名
使用libgdiplus的DotNet核心应用程序在Mac上不会显示抗锯齿。无论是使用Mono还是System.Drawing.Image,都会发生这种情况 不完全确定我是否了解内部结构;然而,在Windows上,我相信这是使用GDI+,而在Mac上,libgdiplus使用Cairo 在PC(左)上,调整大小后的图像很好,但在Mac OS X(右)上使用了完全相同的代码 对于如何解决macOS目标的这种不兼容性,有什么见解吗 用于调整图像大小的代码: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
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建议添加以下参考:
当前CoreCompat的一个解决方案是系统。一旦netstandard 2.0发布,CoreCompat的绘图库将被更新。CoreCompat使用Mono源,因此是的,结果应该是相同的,即使是坏的…;-)在质量方面,我会避免使用libgdiplus,而使用其他任何东西。。。如果质量/速度是一个关键问题,我强烈推荐
Magick.NET
或SkiaSharp
。。。它们都使用依赖于平台的本地lib,而且速度很快(谷歌的Skia尖叫,但有人说Magick的“质量”更好)ImageSharp
是一个纯基于CIL的系统,速度较慢,但质量很好。@Sushingover感谢这些建议-我将两者进行比较。仅供参考:MS的好博文: