.NET 8 中的跨平台 System.Drawing.Bitmap?

问题描述 投票:0回答:1

我们一直在将 .NET 4.x 应用程序迁移到 .NET 8,并遇到了

System.Drawing.Bitmap
的巨大问题。我们的图像处理严重依赖于图形库,例如 AForge。 AForge 库使用
System.Drawing.Bitmap
和锁定位并操作
Bitmap
对象的非托管内存。

我的问题:是否有

System.Drawing.Bitmap
的包装器或者是否正在努力复制基本功能?或者,Microsoft 建议的替代库是否提供对可与第三方库(例如 AForge)一起使用的图像内存的非托管(不安全)访问?

我理解微软关于“一百万个错误等”的举动。与单声道实现。但是,成千上万的库依赖于基本的

System.Drawing.Bitmap
功能,这只是整个
System.Drawing
命名空间的一小部分。似乎可以复制最流行的组件,以继续使用人们和公司努力构建的大量库。

参考:https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only

blazor blazor-server-side system.drawing .net-8.0
1个回答
0
投票

今晚在将 System.Drawing.Common 升级到 8x 后才发现这个问题,但 OP 是我在该主题上发现的唯一问题。

我使用 SkiaSharp(通知中提到的第一个替代方案)进行直接替换。它没有许可证限制,并且似乎与触发编译器警告的现有 System.Drawing 代码有类似的分解。

[通过 System.Drawing 生成位图:(如果不运行 windows post .Net 6,这显然会引发错误)

  using (var ms = new MemoryStream())
  using (Image img = new Bitmap(1, 1)) {
      img.Save(ms, ImageFormat.Jpeg);
      var bytes = ms.ToArray();
      return this.File(bytes, "image/jpeg");
  }

通过 SkiaSharp:

 using (var bmap = new SKBitmap(1, 1, false))
 using (var img = SKImage.FromBitmap(bmap))
 using (var bytes = img.Encode(SKEncodedImageFormat.Jpeg, 0)) {
    return this.File(bytes.ToArray(), "image/jpeg");
 }

我希望这对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.