/// <summary>
        /// Resize, rotate, incoming image, disposing it and saving transformations to disk
        /// </summary>
        /// <param name="image"></param>
        /// <param name="pathFileName"></param>
        /// <param name="angle"></param>
        private static void PrepareAndSaveEditablePhoto(Image image, string pathFileName, float angle)
        {
            Image img = null;

            try
            {
                // Resize to maximum allowed size (but not upscale) to allow user cropping later
                var auxImg = LcImaging.Rotate(image, angle, DefaultBackground);
                var w      = FixedSizeWidth * WorkPhotoOriginalScale;
                var h      = FixedSizeHeight * WorkPhotoOriginalScale;
                if (auxImg.Width < auxImg.Height)
                {
                    // It's portrait, keep original in portrait to prevent the problem of photo getting smaller
                    // with each rotation; further processing creating optimized photos will make it landscape.
                    var aux = w;
                    w = h;
                    h = aux;
                }
                img = LcImaging.Resize(auxImg, w, h, LcImaging.SizeMode.Contain, LcImaging.AnchorPosition.Center, DefaultBackground);
                auxImg.Dispose();

                // Free source, no needed any more and if comes from file, saving will crash
                image.Dispose();

                // Save:
                img.Save(pathFileName, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            finally
            {
                if (img != null)
                {
                    img.Dispose();
                }
            }
        }
        /// <summary>
        /// Save the uploaded photo as an image on the user folder
        /// with a greater size than usual but limited,
        /// for later use on cropping and resizing tasks.
        /// </summary>
        /// <param name="photo"></param>
        /// <param name="virtualPath"></param>
        public static void SaveEditableProfilePicture(int userID, Stream photo, float angle)
        {
            // Check folder or create
            string virtualPath = LcUrl.RenderAppPath + GetUserPhotoFolder(userID);
            var    folder      = System.Web.HttpContext.Current.Server.MapPath(virtualPath);

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            // Use file as image
            using (var srcImg = System.Drawing.Image.FromStream(photo))
            {
                // Resize to maximum allowed size (but not upscale) to allow user cropping later
                var auxImg = LcImaging.Rotate(srcImg, angle, DefaultBackground);
                var img    = LcImaging.Resize(auxImg, profilePictureFixedSizeWidth * profilePictureOriginalScale, profilePictureFixedSizeHeight * profilePictureOriginalScale, profilePictureSizeMode, LcImaging.AnchorPosition.Center, DefaultBackground);
                auxImg.Dispose();

                // Save:
                img.Save(folder + avatarName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                img.Dispose();
            }

            photo.Dispose();
        }
        /// <summary>
        /// Ask to edit the original saved profile picture applying a rotation.
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="angle"></param>
        /// <returns>True when exists and everything fine, false if no photo exists so couldn't perform task. Throw exception if error</returns>
        public static bool EditEditableProfilePicture(int userID, float angle)
        {
            string virtualPath = LcUrl.RenderAppPath + GetUserPhotoFolder(userID);
            var    folder      = System.Web.HttpContext.Current.Server.MapPath(virtualPath);

            if (!Directory.Exists(folder))
            {
                return(false);
            }

            var file = folder + avatarName + ".jpg";

            if (!File.Exists(file))
            {
                return(false);
            }

            // Use file as image
            Image img = null;

            try
            {
                using (var srcImg = System.Drawing.Image.FromFile(file))
                {
                    // Resize to maximum allowed size (but not upscale) to allow user cropping later
                    var auxImg = LcImaging.Rotate(srcImg, angle, DefaultBackground);
                    img = LcImaging.Resize(auxImg, profilePictureFixedSizeWidth * profilePictureOriginalScale, profilePictureFixedSizeHeight * profilePictureOriginalScale, profilePictureSizeMode, LcImaging.AnchorPosition.Center, DefaultBackground);
                    auxImg.Dispose();
                }
                // Save:
                img.Save(file, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            finally
            {
                if (img != null)
                {
                    img.Dispose();
                }
            }

            return(true);
        }