コード例 #1
0
        public int CompareTo(Color other)
        {
            int comparison;

            var thisCategory = GetColorCategory();

            comparison = ((int)thisCategory).CompareTo((int)other.GetColorCategory());
            if (comparison != 0)
            {
                return(comparison);
            }

            comparison = ColorConversion.RgbToLum(ColorConversion.ColorToRgb(this))
                         .CompareTo(ColorConversion.RgbToLum(ColorConversion.ColorToRgb(other)));
            if ((int)thisCategory % 2 == 0)
            {
                comparison = -comparison;
            }
            if (comparison != 0)
            {
                return(comparison);
            }

            return(comparison);
        }
コード例 #2
0
ファイル: Adjective.cs プロジェクト: kakka-z/KoiCatalog
        private static Vector3i ColorToPoint(Color color)
        {
            var rgb = ColorConversion.ColorToRgb(color);
            var xyz = ColorConversion.RgbToXyz(rgb);
            var lab = ColorConversion.XyzToLab(xyz);

            return(lab);
        }
コード例 #3
0
        public Texture3D(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            int[] bitmapArray;
            using (var image = Image.FromStream(stream))
                using (var bitmap = new Bitmap(image))
                {
                    BitmapData bitmapData = null;
                    try
                    {
                        bitmapData = bitmap.LockBits(
                            new Rectangle(Point.Empty, bitmap.Size),
                            ImageLockMode.ReadOnly,
                            PixelFormat.Format32bppArgb);

                        Trace.Assert(bitmapData.Stride % sizeof(int) == 0);
                        bitmapArray = new int[(bitmapData.Stride / sizeof(int)) * bitmapData.Height];
                        Marshal.Copy(bitmapData.Scan0, bitmapArray, 0, bitmapArray.Length);

                        Pixels = new Vector3[
                            bitmapData.Height,
                            bitmapData.Height,
                            bitmapData.Width / bitmapData.Height
                                 ];
                    }
                    finally
                    {
                        if (bitmapData != null)
                        {
                            bitmap.UnlockBits(bitmapData);
                        }
                    }
                }

            var size   = Size;
            var w      = size[0];
            var h      = size[1];
            var d      = size[2];
            var stride = w * d;

            for (var i = 0; i < bitmapArray.Length; i++)
            {
                var x = i % w;
                var y = i / stride;
                y = (h - 1) - y; // Invert y axis
                var z = (i / w) % d;

                var color = Color.FromUint((uint)bitmapArray[i]);
                var rgb   = ColorConversion.ColorToRgb(color);
                Pixels[x, y, z] = rgb;
            }
        }
コード例 #4
0
        private ColorCategory GetColorCategory()
        {
            var rgb = ColorConversion.ColorToRgb(this);
            var hsv = ColorConversion.RgbToHsv(rgb);

            if (hsv[1] < 0.12f)
            {
                return(ColorCategory.Grays);
            }

            float lumCutoff;

            if (hsv[1] > 0.9)
            {
                lumCutoff = 0.1f;
            }
            else if (hsv[1] > 0.8)
            {
                lumCutoff = 0.13f;
            }
            else if (hsv[1] > 0.6)
            {
                lumCutoff = 0.19f;
            }
            else if (hsv[1] > 0.4)
            {
                lumCutoff = 0.22f;
            }
            else
            {
                lumCutoff = 0.28f;
            }

            var lum = Math.Sqrt(ColorConversion.RgbToLum(rgb));

            if (lum < lumCutoff)
            {
                return(ColorCategory.Grays);
            }

            if (hsv[0] <= 26)
            {
                return(ColorCategory.Red);
            }
            if (hsv[0] <= 44)
            {
                return(ColorCategory.Orange);
            }
            if (hsv[0] <= 69)
            {
                return(ColorCategory.Yellow);
            }
            if (hsv[0] <= 152)
            {
                return(ColorCategory.Green);
            }
            if (hsv[0] <= 184)
            {
                return(ColorCategory.Cyan);
            }
            if (hsv[0] <= 257)
            {
                return(ColorCategory.Blue);
            }
            if (hsv[0] <= 296)
            {
                return(ColorCategory.Purple);
            }
            if (hsv[0] <= 330)
            {
                return(ColorCategory.Pink);
            }
            return(ColorCategory.Red);
        }