Example #1
0
 public CustomVideoComparisonStatusData GetStatus(
     int imageComparisonIndex = 0)
 {
     lock (StatusLock)
     {
         var statusData = new CustomVideoComparisonStatusData
         {
             ImageComparisons =
                 Status.ImageComparisons
                 .Skip(imageComparisonIndex)
                 .ToList(),
             Token = Token,
             VideoCompareResult = Status.VideoCompareResult,
         };
         if (LeftVideoFile != null)
         {
             statusData.LeftVideoFile =
                 new VideoDedupShared.VideoFile(LeftVideoFile);
         }
         if (RightVideoFile != null)
         {
             statusData.RightVideoFile =
                 new VideoDedupShared.VideoFile(RightVideoFile);
         }
         return(statusData);
     }
 }
        private void UpdateImageComparisonResult(
            CustomVideoComparisonStatusData status)
        {
            if (!status.ImageComparisons.Any())
            {
                return;
            }

            var leftThumbnailSize = GetThumbnailSize(
                status.LeftVideoFile.CodecInfo);
            var rightThumbnailSize = GetThumbnailSize(
                status.RightVideoFile.CodecInfo);

            PnlResult.Visible = true;

            Image StreamToImage(MemoryStream stream)
            {
                if (stream != null)
                {
                    return(Image.FromStream(stream));
                }
                return(new Bitmap(1, 1));
            }

            foreach (var loadLevel in status.ImageComparisons
                     .GroupBy(kvp => kvp.Item2.ImageLoadLevel))
            {
                var(grb, tlp) = GetLoadLevelControls(loadLevel.Key);
                grb.Visible   = true;

                var lastCompared = status.VideoCompareResult?.LastComparisonIndex;
                if (lastCompared != null &&
                    loadLevel.Any(k => k.Item1 == lastCompared.Value))
                {
                    FinishedInLoadLevel = loadLevel.Key;
                }
                var loaded = FinishedInLoadLevel == null ||
                             loadLevel.Key <= FinishedInLoadLevel;

                tlp.Controls.AddRange(loadLevel.SelectMany(kvp =>
                {
                    var leftPib = new PictureBox
                    {
                        Image = StreamToImage(kvp.Item2.LeftImage)
                                .Resize(leftThumbnailSize),
                        SizeMode = PictureBoxSizeMode.AutoSize,
                        Anchor   = AnchorStyles.None,
                    };

                    var finished = lastCompared != null &&
                                   kvp.Item1 > lastCompared;
                    var text = GetTextFromImageComparison(
                        kvp.Item1,
                        kvp.Item2,
                        finished,
                        loaded);
                    var backColor = GetColorFromImageComparison(
                        kvp.Item2,
                        finished);
                    var result = new Label
                    {
                        Text      = text,
                        Dock      = DockStyle.Fill,
                        TextAlign = ContentAlignment.MiddleCenter,
                        BackColor = backColor,
                    };

                    var rightPib = new PictureBox
                    {
                        Image = StreamToImage(kvp.Item2.RightImage)
                                .Resize(rightThumbnailSize),
                        SizeMode = PictureBoxSizeMode.AutoSize,
                        Anchor   = AnchorStyles.None,
                    };
                    return(new Control[] { leftPib, result, rightPib });
                }).ToArray());
            }
        }