System.Drawing.Common.Bitmap跨平台的替代方案

使用SkiaSharp

SkiaSharp是Skia Graphics Library的.Net跨平台实现,它可以在Windows,macOS,Linux,iOS,Android和其他平台上使用。

例如需要Linux版,则安装第一个和第四个:

System.Drawing.Common.Bitmap跨平台的替代方案_第1张图片

以下是使用SkiaSharp创建位图的示例代码:

// 创建位图
using (var surface = SKSurface.Create(new SKImageInfo(width, height)))
{
    // 获取画布
    var canvas = surface.Canvas;

    // 绘制位图内容
    canvas.DrawRect(new SKRect(0, 0, width, height), new SKPaint() { Color = SKColors.White });
    canvas.DrawText("Hello, SkiaSharp!", new SKPoint(20, 50), new SKPaint() { Color = SKColors.Black });

    // 将位图转换为字节数组
    var image = surface.Snapshot();
    var data = image.Encode().ToArray();

    // 加载到内存流中或保存到文件中
}

以上示例创建了一个空白的位图,并在其中绘制文本。你可以使用其他SKCanvas的绘制方法,如画线、绘制形状等。

当然,如果你已经有一个System.Drawing.Bitmap对象并且想要将它转换为SkiaSharp位图,你可以使用以下代码:

using (var stream = new MemoryStream())
{
    // 将System.Drawing.Bitmap转换为SkiaSharp位图
    bitmap.Save(stream, ImageFormat.Png);
    stream.Position = 0;
    var codec = SKCodec.Create(stream);

    // 创建位图并从流中解码
    using (var surface = SKSurface.Create(new SKImageInfo(codec.Info.Width, codec.Info.Height)))
    {
        var canvas = surface.Canvas;
        canvas.DrawBitmap(SKBitmap.Decode(codec), new SKRect(0, 0, codec.Info.Width, codec.Info.Height));
        var image = surface.Snapshot();
        var data = image.Encode().ToArray();

        // 加载到内存流中或保存到文件中
    }
}

在这个示例中,我们将System.Drawing.Bitmap对象保存到内存流中,然后使用Sk……


引自:System.Drawing.Common.Bitmap跨平台的替代方案-火山引擎
此外推荐一个好文:
杂谈 System.Drawing.Common 的跨平台性(关键词:libgdiplus / .NET Core / Mono / Win32 / Linux / ……) - walterlv

你可能感兴趣的:(C#,c#,.netcore)