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

ML.NET 2.0中System.Drawing.Bitmap转MLImage的实现问题

解决ML.NET 2.0中Bitmap转MLImage的问题

针对你升级ML.NET时遇到的Bitmap转MLImage无效的问题,这里有两个可行的解决方案:

1. 修复流转换的问题

你当前的流转换方法无效,核心原因是Bitmap.Save后,MemoryStream的Position指针停留在流的末尾,导致MLImage.CreateFromStream读取不到数据。修正代码如下:

using (var memoryStream = new MemoryStream())
{
    myBitmap.Save(memoryStream, ImageFormat.Bmp);
    // 重置流指针到起始位置
    memoryStream.Position = 0;
    var mlImage = MLImage.CreateFromStream(memoryStream);
    var prediction = predictionEngine.Predict(new Input { Image = mlImage });
}

注意用using包裹MemoryStream,确保资源被正确释放。

2. 直接从Bitmap转换(更高效)

ML.NET 2.0提供了直接从Bitmap创建MLImage的方法,无需通过流中转,效率更高:

var mlImage = MLImage.CreateFromBitmap(myBitmap);
var prediction = predictionEngine.Predict(new Input { Image = mlImage });

这个方法会直接处理内存中的Bitmap数据,避免了流的序列化/反序列化开销,推荐优先使用。

额外注意事项

  • 确保你的Bitmap格式是ML.NET支持的(如RGB24、BGRA32等),如果格式不兼容,可能需要先转换Bitmap的像素格式。
  • 使用完MLImage后,记得调用mlImage.Dispose()释放资源,或者用using包裹:
    using (var mlImage = MLImage.CreateFromBitmap(myBitmap))
    {
        var prediction = predictionEngine.Predict(new Input { Image = mlImage });
    }
    

内容的提问来源于stack exchange,提问作者Ben Quan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:09:57