// save coordinates of the current image index
        private void saveCoordinates()
        {
            // save all rectangles coordinates
            List <int> coordinates = rectangles.getAllRectCoordinates();

            double resizeFactor = 0;

            try
            {
                resizeFactor = imageResizeFactor[currentImageIndex];
            }
            catch (ArgumentOutOfRangeException)
            {
                calculateResizeFactor(currentImageIndex);
                resizeFactor = imageResizeFactor[currentImageIndex];
            }

            int faceWidth = (mode == Constants.faceMode) ? rectangles.getRectangles()[0].Width : imagePanel.BackgroundImage.Width;

            // calculate real coordinates
            if (coordinatesList.getRow(currentImageIndex) == null)
            {
                // add new properties associated with this image, some are based on current mode
                lookAngleContainer.addRow(lookAngle.ToList());
                faceModeSize.addRow(new List <int> {
                    faceWidth
                });
                coordinatesList.addRow(coordinates);
                realCoordinatesList.addRow(calculateRealCoordinates(coordinates));

                if (mode == Constants.faceMode)
                {
                    isFacePresent.Add((noFaceCB.Checked ? 1 : 0));
                }
                if (mode == Constants.faceElementsMode)
                {
                    eyesNotVisibleContainer.addRow(eyesNotVisible.ToList());
                }
                if (mode == Constants.eyeContourMode)
                {
                    eyeClosed.Add((eyeClosedCB.Checked ? 1 : 0));
                }
            }
            else
            {
                // replace new properties associated with this image, some are based on current mode
                lookAngleContainer.replaceRow(lookAngle.ToList(), currentImageIndex);
                coordinatesList.replaceRow(coordinates, currentImageIndex);
                realCoordinatesList.replaceRow(calculateRealCoordinates(coordinates), currentImageIndex);
                faceModeSize.replaceRow(new List <int> {
                    faceWidth
                }, currentImageIndex);

                if (mode == Constants.faceMode)
                {
                    isFacePresent[currentImageIndex] = (noFaceCB.Checked ? 1 : 0);
                }
                if (mode == Constants.faceElementsMode)
                {
                    eyesNotVisibleContainer.replaceRow(eyesNotVisible.ToList(), currentImageIndex);
                }
                if (mode == Constants.eyeContourMode)
                {
                    eyeClosed[currentImageIndex] = (eyeClosedCB.Checked ? 1 : 0);
                }
            }

            // set look angle and checkbox states
            lookAngle = new int[] { 0, 0, 0, 0 };
            setCheckBoxes(new CheckBox[] { leftCB, rightCB, upCB, downCB });

            if (mode == Constants.faceElementsMode)
            {
                eyesNotVisible = new int[] { 0, 0 };
                setEyesCheckBoxes(new CheckBox[] { LEnotVCB, REnotVCB });
            }
            if (mode == Constants.faceMode)
            {
                noFaceCB.Checked = false;
            }
            if (mode == Constants.eyeContourMode)
            {
                eyeClosedCB.Checked = false;
            }
        }