zoukankan      html  css  js  c++  java
  • CMYK列印颜色

    CMYK颜色标准是彩色印刷机标准,在我们开发程序中对于颜色只有RGB模式的在C#语言中就是Color类来代表的。

    它们之间颜色效果会存在一些差异,为了减少这些差异可以通过一下计算方式去匹配出对应的颜色数据。


        /// <summary>
        /// CMYK列印颜色
        /// </summary>
        public sealed class CMYKColor
        {
            #region --- 成员 Begin ---
    
            [CompilerGenerated]
            private double _C;
            /// <summary>
            /// C值
            /// </summary>
            public double C
            {
                [CompilerGenerated]
                get { return _C; }
                [CompilerGenerated]
                set { _C = value; }
            }
            [CompilerGenerated]
            private double _M;
            /// <summary>
            /// M值
            /// </summary>
            public double M
            {
                [CompilerGenerated]
                get { return _M; }
                [CompilerGenerated]
                set { _M = value; }
            }
            [CompilerGenerated]
            private double _Y;
            /// <summary>
            /// Y值
            /// </summary>
            public double Y
            {
                [CompilerGenerated]
                get { return _Y; }
                [CompilerGenerated]
                set { _Y = value; }
            }
            [CompilerGenerated]
            private double _K;
            /// <summary>
            /// K值
            /// </summary>
            public double K
            {
                [CompilerGenerated]
                get { return _K; }
                [CompilerGenerated]
                set { _K = value; }
            }
    
            #endregion --- 成员 End ---
    
            #region --- 构造方法 Begin ---
    
            /// <summary>
            /// CMYKColor默认构造方法
            /// </summary>
            public CMYKColor()
            {
                this._C = 0.0;
                this._M = 0.0;
                this._Y = 0.0;
                this._K = 1.0;
            }
    
            /// <summary>
            /// CMYKColor使用Int值模式赋值
            /// </summary>
            /// <param name="c">C 取值范围0~100</param>
            /// <param name="m">M 取值范围0~100</param>
            /// <param name="y">Y 取值范围0~100</param>
            /// <param name="k">K 取值范围0~100</param>
            public CMYKColor(int c, int m, int y, int k)
            {
                if (c >= 0 && c <= 100)
                {
                    this._C = c / 100.0;
                }
                else
                {
                    this._C = 0.0;
                }
                if (m >= 0 && m <= 100)
                {
                    this._M = m / 100.0;
                }
                else
                {
                    this._M = 0.0;
                }
                if (y >= 0 && y <= 100)
                {
                    this._Y = y / 100.0;
                }
                else
                {
                    this._Y = 0.0;
                }
                if (k >= 0 && k <= 100)
                {
                    this._K = k / 100.0;
                }
                else
                {
                    this._K = 1.0;
                }
            }
    
            /// <summary>
            /// CMYKColor使用Double值模式赋值
            /// </summary>
            /// <param name="c">C 取值范围1~0.00</param>
            /// <param name="m">M 取值范围1~0.00</param>
            /// <param name="y">Y 取值范围1~0.00</param>
            /// <param name="k">K 取值范围1~0.00</param>
            public CMYKColor(double c, double m, double y, double k)
            {
                this._C = c;
                this._M = m;
                this._Y = y;
                this._K = k;
            }
    
            /// <summary>
            /// CMYKColor使用System.Drawing.Color赋值
            /// </summary>
            /// <param name="color">颜色类型</param>
            public CMYKColor(Color color)
            {
                this.ColorToCMYKColor(color);
            }
    
            #endregion --- 构造方法 End ---
    
            #region --- 转换方法 Begin ---
    
            /// <summary>
            /// 从颜色类型转换为CMYKColor
            /// </summary>
            /// <param name="color">需要转换的颜色</param>
            public void ColorToCMYKColor(Color color)
            {
                double numR = ((double)(0xff - color.R)) / 255;
                double numG = ((double)(0xff - color.G)) / 255;
                double numB = ((double)(0xff - color.B)) / 255;
                double numContrast = Math.Min(numR, Math.Min(numG, numB));
                if (numContrast == 1)
                {
                    this._C = 0.0;
                    this._M = 0.0;
                    this._Y = 0.0;
                    this._K = 1.0;
                }
                else
                {
                    this._C = (numR - numContrast) / (1 - numContrast);
                    this._M = (numG - numContrast) / (1 - numContrast);
                    this._Y = (numB - numContrast) / (1 - numContrast);
                    this._K = numContrast;
                }
            }
    
            /// <summary>
            /// 从CMYK转换为Color
            /// </summary>
            /// <returns></returns>
            public Color CMYKColorToColor()
            {
                return Color.FromArgb(Convert.ToInt32((double)(((1 - this._C) * (1 - this._K)) * 255)), Convert.ToInt32((double)(((1 - this._M) * (1 - this._K)) * 255)), Convert.ToInt32((double)(((1 - this._Y) * (1 - this._K)) * 255)));
            }
    
            /// <summary>
            /// 获取CMYK的百分比
            /// </summary>
            /// <param name="value">C or M or Y or K</param>
            /// <param name="digits">小数后多少位</param>
            /// <returns></returns>
            public double GetPercent(double value, int digits)
            {
                return Math.Round((double)(value * 100), digits);
            }
    
            #endregion --- 转换方法 End ---
    
            /// <summary>
            /// 显示CMYK各值的百分比
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                int digits = 2;
                return string.Format("C={0}%; M={1}%; Y={2}%; K={3}%", this.GetPercent(this._C, digits), this.GetPercent(this._M, digits), this.GetPercent(this._Y, digits), this.GetPercent(this._K, digits));
            }
        }





  • 相关阅读:
    Java集合的Stack、Queue、Map的遍历
    LinkedHashMap的实现原理
    HashSet的实现原理
    HashMap的实现原理
    leetcode526
    leetcode406
    leetcode413
    leetcode513
    leetcode338
    leetcode419
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3262799.html
Copyright © 2011-2022 走看看