是否可以在.net中绘制带有CMYK颜色填充的形状?

时间:2009-08-11 11:11:21

标签: .net

是否可以创建用户输入CMYK值的aspx页面,并显示CMYK颜色?

我做了一些谷歌搜索,System.Drawing库似乎使用RGB。

2 个答案:

答案 0 :(得分:1)

不,这是不可能的。 HTML / CSS和.NET的System.Drawing都是基于RGB的。虽然您可以使用颜色转换器将CMYK转换为RGB,但它不是完美的1对1映射,因为CMYK颜色空间中的颜色无法用RGB表示,反之亦然。

但是,要更加面向解决方案:以下代码将为您提供简单的转换:

CMYK到RGB

int r = (int) 255 * (1 - (c * (1 - k) + k));
int g = (int) 255 * (1 - (m * (1 - k) + k));
int b = (int) 255 * (1 - (y * (1 - k) + k));

RGB到CMYK

float c = 1 - r / 255f;
float m = 1 - g / 255f;
float y = 1 - b / 255f;
float k = c;
if (k > m)
    k = m;
if (k > y)
    k = y;

if (k == 1)
{
    c = 0; m = 0; y = 0;
}
else
{
    c = (c - k) / (1 - k);
    m = (m - k) / (1 - k);
    y = (y - k) / (1 - k);
}

请注意,c,y,m和k的范围为0 - 1(即0% - 100%),r,g,b的范围为0 - 255.

答案 1 :(得分:1)

你不能直接。这将给出从cmyk到rgb的良好近似值

  private Color CMYKtoRBG(float c, float m, float y, float k)
  {
      float r = Math.Min(1, c * (1 - k) + k);
      float g = Math.Min(1, m * (1 - k) + k);
      float b = Math.Min(1, y * (1 - k) + k);
      return Color.FromArgb(255-(int)(r * 255),255- (int)(g * 255), 255-(int)(b * 255));
  }