我们一直在将 .NET 4.x 应用程序迁移到 .NET 8,并遇到了
System.Drawing.Bitmap
的巨大问题。我们的图像处理严重依赖于图形库,例如 AForge。 AForge 库使用 System.Drawing.Bitmap
和锁定位并操作 Bitmap
对象的非托管内存。
我的问题:是否有
System.Drawing.Bitmap
的包装器或者是否正在努力复制基本功能?或者,Microsoft 建议的替代库是否提供对可与第三方库(例如 AForge)一起使用的图像内存的非托管(不安全)访问?
我理解微软关于“一百万个错误等”的举动。与单声道实现。但是,成千上万的库依赖于基本的
System.Drawing.Bitmap
功能,这只是整个 System.Drawing
命名空间的一小部分。似乎可以复制最流行的组件,以继续使用人们和公司努力构建的大量库。
今晚在将 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");
}
我希望这对某人有帮助。