You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使仅支持Windows的Bitmap转字节数组代码跨平台运行?

跨平台替代方案

原代码依赖的System.Drawing.Bitmap和ImageFormat属于System.Drawing.Common库,在.NET 6及以上版本中,该库已不再官方支持非Windows平台(强制启用需设置环境变量,但不推荐生产环境使用)。要实现跨平台的图像转字节数组功能,推荐使用专门的跨平台图像处理库,以下是两种可行方案:

方案一:使用ImageSharp

ImageSharp是一款高性能、跨平台的.NET图像处理库,完全无系统依赖。

  1. 安装NuGet包:
Install-Package SixLabors.ImageSharp
  1. 替换后的代码:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using System.IO;

private static byte[] ImageToBytesCode(Image<Rgba32> image)
{
    using (MemoryStream stream = new MemoryStream())
    {
        image.Save(stream, new PngEncoder());
        return stream.ToArray();
    }
}

如果你的代码仍需要兼容原有的System.Drawing.Bitmap对象,可以通过流转换:

// 将System.Drawing.Bitmap转为ImageSharp的Image
using var bitmapStream = new MemoryStream();
originalBitmap.Save(bitmapStream, System.Drawing.Imaging.ImageFormat.Png);
bitmapStream.Position = 0;
using var imageSharpImage = Image.Load<Rgba32>(bitmapStream);

// 调用上面的转换方法
var bytes = ImageToBytesCode(imageSharpImage);

方案二:使用SkiaSharp

SkiaSharp是Google Skia图形库的.NET绑定,同样是跨平台的图像处理方案。

  1. 安装NuGet包:
Install-Package SkiaSharp
  1. 替换后的代码:
using SkiaSharp;
using System.IO;

private static byte[] BitmapToBytesCode(SKBitmap bitmap)
{
    using (MemoryStream stream = new MemoryStream())
    using (SKImage image = SKImage.FromBitmap(bitmap))
    using (SKData data = image.Encode(SKEncodedImageFormat.Png, 100))
    {
        data.SaveTo(stream);
        return stream.ToArray();
    }
}

若要从System.Drawing.Bitmap转换为SKBitmap,可参考如下方式:

using var bitmapStream = new MemoryStream();
originalBitmap.Save(bitmapStream, System.Drawing.Imaging.ImageFormat.Png);
bitmapStream.Position = 0;
using var skBitmap = SKBitmap.Decode(bitmapStream);

// 调用转换方法
var bytes = BitmapToBytesCode(skBitmap);

内容的提问来源于stack exchange,提问作者Furqat Abduvosiqov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:00:11