Пример #1
0
        /// <summary>calculates image size based on the canvas. is this working? </summary>
        /// <remarks>this shoudd be a utility.</remarks>
        static public PointF pRatio(FloatPoint c, FloatPoint o, scaleFlags sf)
        {
            FloatPoint skaler = new Point();
            float      tr = 0;
            string     omax, cmax;

            if (o.X >= o.Y)
            {
                omax = "width";
            }
            else
            {
                omax = "height";                                           //orig
            }
            if (c.X >= c.Y)
            {
                cmax = "width";
            }
            else
            {
                cmax = "height";                                           //canv
            }
            switch (cmax)
            {
            case "width": if (omax == cmax)
                {
                    sf = scaleFlags.sWidth;
                }
                else
                {
                    sf = scaleFlags.sHeight;
                } break;

            case "height": if (omax == cmax)
                {
                    sf = scaleFlags.sHeight;
                }
                else
                {
                    sf = scaleFlags.sWidth;
                } break;
            }

skale:
            switch (sf)
            {
            case scaleFlags.sHeight:
                if (o.IsYG(c))
                {
                    skaler.Y = c.Y; tr = (float)((float)c.Y / (float)o.Y);
                    skaler.X = (int)Math.Round(o.X * tr);
                }
                else
                {
                    skaler = o;
                } break;

            case scaleFlags.sWidth:
                if (o.X > c.X)
                {
                    skaler.X = c.X;
                    tr       = (float)((float)c.X / (float)o.X); skaler.Y = (int)Math.Round(o.Y * tr);
                }
                else
                {
                    skaler = o;
                } break;
            }

            if ((skaler.X > c.X) | (skaler.Y > c.Y))
            {
                switch (sf)
                {
                case scaleFlags.sWidth: sf = scaleFlags.sHeight; goto skale;

                case scaleFlags.sHeight: sf = scaleFlags.sWidth; goto skale;
                }
            }
            return(skaler);
        }