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

按颜色生成直方图通道时重复保存蓝色通道的问题排查

视频帧颜色通道直方图截图问题修复

问题1:所有通道截图均为蓝色通道内容

原因

当前代码处理单帧时,将灰度、红、绿、蓝四个直方图依次绘制到同一个zedGraphControl1的GraphPane中,最后绘制的蓝色通道会覆盖之前的所有内容。调用SaveGraphScreenshots时直接对该控件截图,导致所有通道的截图文件都只显示最后绘制的蓝色通道直方图。

修复方案

修改SaveGraphScreenshots方法,针对每个需要保存的通道,单独清空GraphPane、仅绘制对应通道的直方图,完成截图后再恢复原有绘制内容。

问题2:未实现仅保存有数据的颜色通道截图

原因

当前使用redHistogram.Any()判断通道是否有数据,但int类型的直方图数组初始化时包含256个0值,Any()方法只要数组非空就返回true,无法识别通道是否有实际像素数据(即直方图计数是否存在非零值)。

修复方案

替换判断逻辑,检查直方图数组中是否存在大于0的元素,以此确定是否需要保存该通道的截图。


修改后的完整代码

修复后的SaveGraphScreenshots方法

private void SaveGraphScreenshots(string frameFolderPath, int[] redHistogram, int[] greenHistogram, int[] blueHistogram)
{
    // 保存原始曲线和标题,用于后续恢复界面显示
    var originalCurves = zedGraphControl1.GraphPane.CurveList.ToList();
    var originalTitle = zedGraphControl1.GraphPane.Title.Text;

    try
    {
        // 处理蓝色通道截图(仅当有数据时)
        if (blueHistogram.Any(count => count > 0))
        {
            zedGraphControl1.GraphPane.CurveList.Clear();
            PlotHistogram(blueHistogram, "Blue Channel Histogram", "Pixel Value", "Frequency", zedGraphControl1.GraphPane, Color.Blue);
            zedGraphControl1.AxisChange();
            zedGraphControl1.Refresh();
            
            string blueGraphFilePath = Path.Combine(frameFolderPath, "BlueHistogramGraph.png");
            SaveGraphScreenshot(zedGraphControl1, blueGraphFilePath);
        }

        // 处理红色通道截图(仅当有数据时)
        if (redHistogram.Any(count => count > 0))
        {
            zedGraphControl1.GraphPane.CurveList.Clear();
            PlotHistogram(redHistogram, "Red Channel Histogram", "Pixel Value", "Frequency", zedGraphControl1.GraphPane, Color.Red);
            zedGraphControl1.AxisChange();
            zedGraphControl1.Refresh();
            
            string redGraphFilePath = Path.Combine(frameFolderPath, "RedHistogramGraph.png");
            SaveGraphScreenshot(zedGraphControl1, redGraphFilePath);
        }

        // 处理绿色通道截图(仅当有数据时)
        if (greenHistogram.Any(count => count > 0))
        {
            zedGraphControl1.GraphPane.CurveList.Clear();
            PlotHistogram(greenHistogram, "Green Channel Histogram", "Pixel Value", "Frequency", zedGraphControl1.GraphPane, Color.Green);
            zedGraphControl1.AxisChange();
            zedGraphControl1.Refresh();
            
            string greenGraphFilePath = Path.Combine(frameFolderPath, "GreenHistogramGraph.png");
            SaveGraphScreenshot(zedGraphControl1, greenGraphFilePath);
        }
    }
    finally
    {
        // 恢复界面原始的直方图显示
        zedGraphControl1.GraphPane.CurveList.Clear();
        zedGraphControl1.GraphPane.CurveList.AddRange(originalCurves.ToArray());
        zedGraphControl1.GraphPane.Title.Text = originalTitle;
        zedGraphControl1.AxisChange();
        zedGraphControl1.Refresh();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:08:08