public Point startPixelOrig; //Stores the "fake start point", relevant while analysing the next pixels storing length information

        #endregion Fields

        #region Constructors

        //---
        //Starting actions on account of the given process (encryption/decription)
        public Hashing(Color temp_startColor, Encrypting curEncrypting, Decrypting curDecrypting, IO temp_curIO)
        {
            startColor = temp_startColor;
            curIO = temp_curIO;
            curColors = new List<Color>(curIO.allKnownColors);
            startOffset = new startOffsetInfo();

            if (curEncrypting != null)
            {
                if (curEncrypting.origText == null || curEncrypting.origText.Length < 1)
                {
                    errors = true;
                    return;
                }
                curLength = curEncrypting.origText.Length + 2 + (curEncrypting.origText.Length + 2).ToString().Length; //Length considered while decrypting
                encryptingNumber = curEncrypting.encryptingNumber;
            }
            else
            {
                if (curDecrypting.origBitmap == null)
                {
                    errorMessage = "There was a problem while accessing the image file.";
                    errors = true;
                    return;
                }

                encryptingNumber = curDecrypting.encryptingNumber;
                pixelsToIgnore = new List<Point>();

                //Preliminary validity check by looking for the startColor (in the right position) and determining the length (and the offset, if applicable)
                curIO.getBoundaryPixels(curDecrypting, this);

                if (curLength <= 0)
                {
                    errors = true;
                    return;
                }
            }

            calculateStartStep(); //Calculating curStep

            buildCharsVsColors(); //Building the hash table (dictionary with all the accounted characters and their equivalent color) which will be used in the current encryption/decryption process

            if (curDecrypting != null)
            {
                //For decryption. Confirming that the length value, calculated above, matches the information in the pixels enconding the actual length.
                //The reason for not having this analysis before is the fact that the charsVsColors is required
                if (!curIO.lengthIsOK(curDecrypting, this)) this.errors = true;
            }
        }