public static async Task <BitmapSize> ConvertAsync(
            List <ImageViewModel> images,
            StorageFolder targetFolder,
            BitmapConversionSettings settings,
            Action <int> progressCallback)
        {
            foreach (var image in images)
            {
                image.Status = image.ExtendedStatus = null;
            }

            uint success = 0;
            uint fail    = 0;

            int i = 1;

            foreach (var image in images)
            {
                progressCallback(i);
                i++;
                image.Status = "Converting...";

                try
                {
                    BitmapConversionResult result =
                        await BitmapEncoderFactory.EncodeAsync(image.File, targetFolder, settings).AsTask().ConfigureAwait(false);

                    if (result.Success)
                    {
                        image.Status      = $"Converted ({result.ResultFileSize / 1024d / 1024d:0.00} MB)";
                        image.LastSuccess = true;
                        success++;
                    }
                    else
                    {
                        image.Status         = "Failed";
                        image.ExtendedStatus = result.Status;
                        image.LastSuccess    = false;
                        fail++;
                    }
                }
                catch
                {
                    image.Status         = "Failed";
                    image.ExtendedStatus = "Unspecified error";
                    fail++;
                }
            }

            return(new BitmapSize {
                Width = success, Height = fail
            });
        }