public static Rectangle ReadRectFromIni(IniInterface oIni, string iniPath, bool withTolerance = true)
        {
            int x = 0, y = 0, width = 100, height = 100, tolerance = 0;

            if (withTolerance)
            {
                tolerance = (int.TryParse(oIni.ReadValue(iniPath, "tolerance", "0"), out tolerance)) ? tolerance : 0;
            }

            return(new Rectangle((int.TryParse(oIni.ReadValue(iniPath, "x", "0"), out x)) ? x + tolerance : 0 + tolerance,
                                 (int.TryParse(oIni.ReadValue(iniPath, "y", "0"), out y)) ? y + tolerance : 0 + tolerance,
                                 (int.TryParse(oIni.ReadValue(iniPath, "width", "0"), out width)) ? width - tolerance : 100 - tolerance,
                                 (int.TryParse(oIni.ReadValue(iniPath, "height", "0"), out height)) ? height - tolerance : 100 - tolerance));
        }
        public static Rectangle WriteRectToIni(IniInterface oIni, string iniPath, Rectangle rectCropArea,
                                               double ratio, int imageWidth, int imageHeight, Rectangle mainRectangle)
        {
            Rectangle rect = new Rectangle(
                (int)((((rectCropArea.X > 0) ? rectCropArea.X : 0) / ratio) + mainRectangle.X),
                (int)((((rectCropArea.Y > 0) ? rectCropArea.Y : 0) / ratio) + mainRectangle.Y),
                (int)(((rectCropArea.Width < mainRectangle.Width - rectCropArea.X) ? rectCropArea.Width : mainRectangle.Width * ratio - rectCropArea.X) / ratio),
                (int)(((rectCropArea.Height < mainRectangle.Height - rectCropArea.Y) ? rectCropArea.Height : mainRectangle.Height * ratio - rectCropArea.Y) / ratio));

            oIni.WriteValue(iniPath, "x", (rect.X).ToString());
            oIni.WriteValue(iniPath, "y", (rect.Y).ToString());
            oIni.WriteValue(iniPath, "width", (rect.Width).ToString());
            oIni.WriteValue(iniPath, "height", (rect.Height).ToString());

            return(rect);
        }