【发布时间】:2014-02-24 14:06:35
【问题描述】:
我在 C# 中有代码可以从图像转换为棕褐色调:
for ( int y = startY; y < stopY; y++ )
{
// for each pixel
for ( int x = startX; x < stopX; x++, ptr += pixelSize )
{
t = (byte) ( 0.299 * ptr[RGB.R] + 0.587 * ptr[RGB.G] + 0.114 * ptr[RGB.B] );
// red
ptr[RGB.R] = (byte) ( ( t > 206 ) ? 255 : t + 49 );
// green
ptr[RGB.G] = (byte) ( ( t < 14 ) ? 0 : t - 14 );
// blue
ptr[RGB.B] = (byte) ( ( t < 56 ) ? 0 : t - 56 );
}
ptr += offset;
}
但我不了解值:206、14、56。为什么要使用这些值?请给我解释一下。
谢谢!
【问题讨论】:
-
这些是 RED(R) GREEN(G) BLUE(B) 值,您应该记住,任何颜色都是这 3 种颜色的组合,范围为 0-255。
-
这个算法不适合你吗?
-
是RGB值,用0到255之间的数字表示
-
这只是将一个(正常)色调图转换为另一个(棕褐色)色调图。这些数字将每个 RGB 值的轴向左(右)移动。这些值是经验性的。尝试改变它们以获得另一种转变。
-
206、14 和 56 是为了确保
t不大于 255(对于红色,因为您添加了 49 [49+206=255])或小于 0(对于绿色和蓝色 [因为你减去 14 和 56])。您可能正在添加红色并从绿色和蓝色中减去,因为棕褐色调略带红色。