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

ARGB转6位Hex值:C#图片分割文件名优化技术求助

解决C#图片颜色分割后文件名保留6位RGB值的问题

你当前代码生成文件名时用了color.ToArgb().ToString("X6"),但ToArgb()返回的是包含Alpha通道的32位整数值(格式为0xAARRGGBB),直接用X6格式化存在截断风险,更可靠的方式是直接提取颜色的R、G、B分量,拼接成标准6位十六进制字符串。

核心修改点

替换原代码中保存文件的行:

// 原代码
bitmap2.Save(Path.Combine(Path.GetDirectoryName(fileName), $"{Path.GetFileNameWithoutExtension(fileName)}_{color.ToArgb().ToString("X6")}.png"), ImageFormat.Png);

// 修改后代码
bitmap2.Save(Path.Combine(Path.GetDirectoryName(fileName), $"{Path.GetFileNameWithoutExtension(fileName)}_{color.R:X2}{color.G:X2}{color.B:X2}.png"), ImageFormat.Png);

完整优化后代码

public class PNG2PNGS
{
    public static void Convert(string sourcePath)
    {
        foreach (var fileName in Directory.GetFiles(sourcePath, "*.png"))
        {
            // 使用using自动释放Bitmap资源,避免内存泄漏
            using (Bitmap bitmap = new Bitmap(fileName))
            {
                List<Color> colors = new List<Color>();

                for (int i = 0; i < bitmap.Width; i++)
                {
                    for (int j = 0; j < bitmap.Height; j++)
                    {
                        Color color = bitmap.GetPixel(i, j);
                        if (!colors.Contains(color))
                        {
                            colors.Add(color);
                        }
                    }
                }

                foreach (Color color in colors)
                {
                    using (Bitmap bitmap2 = new Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat))
                    {
                        for (int i = 0; i < bitmap.Width; i++)
                        {
                            for (int j = 0; j < bitmap.Height; j++)
                            {
                                if (bitmap.GetPixel(i, j) == color)
                                {
                                    bitmap2.SetPixel(i, j, color);
                                }
                                else
                                {
                                    bitmap2.SetPixel(i, j, Color.Transparent);
                                }
                            }
                        }

                        // 生成仅含RGB的6位十六进制文件名
                        bitmap2.Save(Path.Combine(Path.GetDirectoryName(fileName), $"{Path.GetFileNameWithoutExtension(fileName)}_{color.R:X2}{color.G:X2}{color.B:X2}.png"), ImageFormat.Png);
                    }
                }
            }
        }
    }
}

额外优化说明

  1. 给所有Bitmap对象添加using语句,确保图像资源能及时释放,避免内存占用过高
  2. 移除了原代码末尾无意义的bitmap.GetPixel(0,0);语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:05:20