【问题标题】:Convert image to sepia tone将图像转换为棕褐色调
【发布时间】: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])。您可能正在添加红色并从绿色和蓝色中减去,因为棕褐色调略带红色。

标签: c# image


【解决方案1】:

颜色使用 3 个颜色通道表示:红色、绿色和蓝色。每个通道可以有 256 种不同的色调,从 0 到 255。

数字 206、14 和 56 用作截止点,以便在将图像转换为棕褐色时赋予图像棕褐色外观。例如,在蓝色通道中,56 以下的蓝色阴影被映射到 0(黑色),否则蓝色会略微向下移动到黑色。对于 206 以上的任何阴影,红色都设置为白色,否则它们会移向白色。

【讨论】:

    【解决方案2】:

    您正在通过将 49 添加到红色并分别从绿色和蓝色中减去 14 和 56 来更改图像的色调,这将使色调变得更像棕褐色。由于您不能将像素颜色值设置为小于 0 或大于 255,因此它们会被剪裁,因此不会超出限制。

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多