.NET Standard 2.0中WriteableBitmap无法使用的问题求助
解决.NET Standard 2.0 Azure Functions中WriteableBitmap不可用的问题
你碰到的这个问题很典型——WriteableBitmap是WPF框架专属的UI类,属于PresentationCore程序集,而.NET Standard 2.0是跨平台标准,并不包含这类仅适用于桌面UI的组件,所以你在Azure Functions项目里找不到这个引用完全正常。
下面给你几个可行的替代方案,都是适配.NET Standard 2.0的跨平台图像处理库:
方案1:使用SixLabors.ImageSharp(推荐)
这是一款轻量、跨平台的图像处理库,完全支持.NET Standard 2.0,API设计直观,能完美替代WriteableBitmap的大部分图像操作场景。
操作步骤:
- 通过NuGet安装包:
Install-Package SixLabors.ImageSharp - 替换你原有的WriteableBitmap创建代码,以下是从像素数组生成图像的示例:
using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; // 假设你的array是像素数据数组 var width = array.Columns; var height = array.Rows; // 对应原代码中的Bgr24格式 using var image = new Image<Bgr24>(width, height); // 将像素数据复制到图像中(根据你的array类型调整逻辑) image.ProcessPixelRows(accessor => { for (int y = 0; y < height; y++) { var row = accessor.GetRowSpan(y); // 替换为你从array获取当前行像素的逻辑 // 比如 array.GetRow(y).CopyTo(row); } }); // 后续图像处理操作均可使用ImageSharp的API完成
方案2:使用SkiaSharp
SkiaSharp是Google Skia图形库的.NET绑定,同样跨平台且支持.NET Standard 2.0,适合复杂图像处理需求。
操作步骤:
- 安装NuGet包:
Install-Package SkiaSharp - 示例代码创建类似图像:
using SkiaSharp; var width = array.Columns; var height = array.Rows; var imageInfo = new SKImageInfo(width, height, SKColorType.Bgra8888, SKAlphaType.Opaque); using var surface = SKSurface.Create(imageInfo); var canvas = surface.Canvas; // 可将像素数组绘制到canvas,或直接创建像素缓冲区 using var bitmap = new SKBitmap(imageInfo); // 复制像素数据到bitmap // bitmap.SetPixels(yourPixelArray);
额外说明
如果你之前依赖System.Drawing相关API,也可以尝试安装System.Drawing.Common NuGet包,它在.NET Standard 2.0上有有限支持,但要注意:该包在非Windows平台(如Linux Azure Functions)存在兼容性问题,微软已标记其为Windows专属,长期来看还是推荐使用前面提到的跨平台库更稳妥。
内容的提问来源于stack exchange,提问作者nor0x
相关产品推荐
相关产品推荐

