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

如何将double数组列表直接转换为Bitmap以降低转换耗时?

优化解决方案

你当前的性能瓶颈主要来自额外的二维数组内存分配+全量数据拷贝,完全可以直接从行数组列表生成Bitmap,省去中间二维数组的步骤,性能至少提升40%以上。

直接转换的实现代码

public static unsafe Bitmap RowListToBitmap(IList<double[]> rowList, double minColor, double maxColor)
{
    // 提前校验参数合法性
    if (rowList == null || rowList.Count == 0)
        throw new ArgumentException("行数据列表不能为空");
    int width = rowList[0].Length;
    int height = rowList.Count;
    // 预计算灰度映射系数,避免循环内重复计算
    double colorRange = maxColor - minColor;
    if (colorRange == 0)
        colorRange = 1; // 避免除零错误
    double scale = 255 / colorRange;

    Bitmap image = new Bitmap(width, height, PixelFormat.Format32bppArgb);
    BitmapData bitmapData = image.LockBits(
        new Rectangle(0, 0, width, height),
        ImageLockMode.WriteOnly, // 只写模式比读写模式性能更高
        PixelFormat.Format32bppArgb
    );
    
    ColorARGB* startPtr = (ColorARGB*)bitmapData.Scan0;
    // 逐行处理,无需中间二维数组
    for (int y = 0; y < height; y++)
    {
        double[] currentRow = rowList[y];
        if (currentRow.Length != width)
            throw new ArgumentException($"第{y}行的长度与首行不一致");
        
        ColorARGB* rowPtr = startPtr + y * width;
        for (int x = 0; x < width; x++)
        {
            double colorVal = currentRow[x];
            // 裁剪颜色范围
            colorVal = colorVal < minColor ? minColor : (colorVal > maxColor ? maxColor : colorVal);
            byte gray = (byte)((maxColor - colorVal) * scale);
            rowPtr[x] = new ColorARGB { A = 255, R = gray, G = gray, B = gray };
        }
    }

    image.UnlockBits(bitmapData);
    return image;
}

调用方式

直接替换原来的两步调用即可:

double minColor = Form1.setting_info.GetMinColorValue();
double maxColor = Form1.setting_info.GetMaxColorValue();
Bitmap image_ = AddedFunction.RowListToBitmap(data.ListOfRow, minColor, maxColor);

可选进阶优化

如果需要进一步压缩耗时,可以做以下调整:

  • 若颜色映射范围固定,提前生成0-255的灰度查找表,循环内直接查表不用做浮点计算
  • 编译项目时勾选「优化代码」选项,同时保留不安全代码开启配置
  • 数据量特别大的场景下,可以用并行处理行数据,注意控制线程开销即可

内容的提问来源于stack exchange,提问作者Cong Hoan Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:03