コード例 #1
0
        public static Color GetAverageColor(this IVirtualTexture virtualTexture, Rect rect, float alpha = 0.5f)
        {
            var colors = new List <Color>();

            for (var w = rect.xMin; w < rect.xMin + rect.width; w++)
            {
                for (var h = rect.yMin; h < rect.yMin + rect.height; h++)
                {
                    var color = virtualTexture.GetPixelColor(w, h);
                    if (color.a < alpha)
                    {
                        continue;
                    }

                    colors.Add(color);
                }
            }

            var colorCount = colors.Count;

            if (colorCount == 0)
            {
                return(Color.clear);
            }

            if (colorCount % 2 == 0)
            {
                var firstColor  = colors[colorCount / 2];
                var secondColor = colors[colorCount / 2 - 1];

                return((firstColor + secondColor) * 0.5f);
            }

            return(colors[Mathf.FloorToInt(colorCount * 0.5f)]);
        }
コード例 #2
0
        public static float GetContrast(this IVirtualTexture virtualTexture, Rect rect)
        {
            var pixelsContrast = new List <float>();

            for (var w = rect.xMin; w < rect.xMin + rect.width; w++)
            {
                for (var h = rect.yMin; h < rect.yMin + rect.height; h++)
                {
                    var color = virtualTexture.GetPixelColor(w, h);
                    if (Mathf.Approximately(color.a, 0.0f))
                    {
                        continue;
                    }

                    var pixelContrast = color.GetLuminance() * color.a;

                    pixelsContrast.Add(pixelContrast);
                }
            }

            pixelsContrast = pixelsContrast.OrderBy(x => x).ToList();
            var pixelsCount = pixelsContrast.Count;

            if (pixelsCount % 2 == 0)
            {
                return((pixelsContrast[pixelsCount / 2] + pixelsContrast[pixelsCount / 2 - 1]) * 0.5f);
            }

            return(pixelsContrast[Mathf.FloorToInt(pixelsCount * 0.5f)]);
        }
コード例 #3
0
        public static int GetOpaquePixelCount(this IVirtualTexture virtualTexture, Rect rect)
        {
            var opaquePixelCount = 0;

            for (var w = rect.xMin; w < rect.xMin + rect.width; w++)
            {
                for (var h = rect.yMin; h < rect.yMin + rect.height; h++)
                {
                    var color = virtualTexture.GetPixelColor(w, h);
                    if (Mathf.Approximately(color.a, 0.0f))
                    {
                        continue;
                    }

                    opaquePixelCount++;
                }
            }

            return(opaquePixelCount);
        }