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

.NET中使用GPU将Bitmap批量转Jpeg写入内存流的方案

用GPU优化库降低图片转JPEG的CPU负载

你的问题很典型——当批量处理Bitmap转JPEG时,System.Drawing的Image.Save()纯CPU处理会让负载飙升。下面推荐两个支持GPU加速的.NET库,附上完整示例代码:

1. SixLabors.ImageSharp(推荐,.NET原生现代库)

ImageSharp是完全托管的图片处理库,内置硬件加速(包括GPU)的JPEG编码支持,无需依赖GDI+,跨平台兼容性拉满。

步骤1:安装NuGet包

Install-Package SixLabors.ImageSharp
Install-Package SixLabors.ImageSharp.Formats.Jpeg

示例代码

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.PixelFormats;
using System.Drawing;
using System.IO;

// 假设你的源图片列表是IEnumerable<Bitmap>
IEnumerable<Bitmap> sourceBitmaps = ...;

// 配置JPEG编码器,核心是启用硬件加速
var jpegEncoder = new JpegEncoder
{
    Quality = 75, // 按需调整画质(0-100)
    UseHardwareAcceleration = true // 关键开关:启用GPU加速
};

using (var combinedMs = new MemoryStream())
{
    foreach (var bmp in sourceBitmaps)
    {
        // 将System.Drawing.Bitmap转换为ImageSharp兼容的Image对象
        using (var image = Image.Load<Rgba32>(bmp))
        {
            // 用GPU加速编码器写入内存流
            image.Save(combinedMs, jpegEncoder);
        }
        // 如果需要分隔多个JPEG文件,可在此添加自定义分隔逻辑
    }

    // 重置流指针,准备后续使用(比如写入文件/网络传输)
    combinedMs.Position = 0;
    // ...你的后续操作
}

2. SkiaSharp(谷歌Skia引擎的.NET绑定)

SkiaSharp是跨平台2D图形库,依托谷歌Skia引擎的性能优势,同样支持GPU加速的JPEG编码。

步骤1:安装NuGet包

Install-Package SkiaSharp
Install-Package SkiaSharp.NativeAssets.Windows // Windows平台专用,其他平台对应安装NativeAssets包

示例代码

using SkiaSharp;
using System.Drawing;
using System.IO;

IEnumerable<Bitmap> sourceBitmaps = ...;

using (var combinedMs = new MemoryStream())
{
    foreach (var bmp in sourceBitmaps)
    {
        // 转换System.Drawing.Bitmap为SkiaSharp的SKBitmap
        using var skBitmap = SKBitmap.FromImage(SKImage.FromBitmap(bmp));
        using var image = SKImage.FromBitmap(skBitmap);
        
        // 配置JPEG编码参数,启用硬件加速
        var jpegOptions = new SKJpegEncoderOptions
        {
            Quality = 75,
            Encoder = SKJpegEncoder.Create(SKJpegEncoder.Default, true) // 启用GPU加速
        };

        // 编码并写入内存流
        using var imageData = image.Encode(jpegOptions);
        imageData.SaveTo(combinedMs);
    }

    combinedMs.Position = 0;
    // ...你的后续操作
}

额外优化提示

  • 两个库都会自动检测系统GPU硬件,支持的话会自动启用加速,把JPEG压缩的计算压力转移到GPU,大幅降低CPU占用。
  • 务必用using语句管理所有实现IDisposable的对象(比如MemoryStream、Image、SKBitmap),比手动调用Close()更安全,还能避免内存泄漏。
  • 可以根据业务需求调整Quality参数,平衡图片画质和文件大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:58:25