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

如何用C语言为BMP图像实现黄色色调处理?附灰度化代码

BMP图像黄色色调处理实现方案

黄色色调的核心是强化红、绿分量,削弱蓝分量(因为黄色由红+绿混合而成,蓝是黄色的补色)。以下两种方案可以实现,你可以根据需求选择:

方案一:基于灰度图生成黄色调(保留亮度,风格统一)

先计算像素的灰度值维持亮度,再调整RGB分量生成黄色:

// 计算原始灰度值(和你之前的灰度化逻辑一致)
int grayscale = (int)(0.299 * img->pArr[i][j].red +
                  0.587 * img->pArr[i][j].green +
                  0.114 * img->pArr[i][j].blue);

// 调整RGB分量生成黄色调:增强红、绿,削弱蓝
img->pArr[i][j].red = (int)(grayscale * 1.2);
img->pArr[i][j].green = (int)(grayscale * 1.15);
img->pArr[i][j].blue = (int)(grayscale * 0.7);

// 强制限制RGB分量在0-255范围内(BMP像素分量是8位无符号数,溢出会出错)
img->pArr[i][j].red = img->pArr[i][j].red > 255 ? 255 : img->pArr[i][j].red;
img->pArr[i][j].green = img->pArr[i][j].green > 255 ? 255 : img->pArr[i][j].green;
img->pArr[i][j].blue = img->pArr[i][j].blue < 0 ? 0 : img->pArr[i][j].blue;

方案二:直接对原图加黄色滤镜(保留部分原有色彩)

不经过灰度化,直接修改原像素的RGB分量,保留部分色彩同时偏向黄色:

int red = img->pArr[i][j].red;
int green = img->pArr[i][j].green;
int blue = img->pArr[i][j].blue;

// 增强红、绿,大幅降低蓝分量
img->pArr[i][j].red = (int)(red * 1.1);
img->pArr[i][j].green = (int)(green * 1.1);
img->pArr[i][j].blue = (int)(blue * 0.4);

// 限制分量范围,避免溢出
img->pArr[i][j].red = fmin(fmax(img->pArr[i][j].red, 0), 255);
img->pArr[i][j].green = fmin(fmax(img->pArr[i][j].green, 0), 255);
img->pArr[i][j].blue = fmin(fmax(img->pArr[i][j].blue, 0), 255);

调整技巧

  • 如果想要更浓郁的黄色,可以进一步降低蓝分量的比例(比如0.3),或者提高红、绿的增强比例(比如1.3);
  • 若颜色过亮,可适当降低红、绿的增强比例,比如改成1.05;
  • 务必保留分量范围限制,否则会出现颜色失真的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:14:52