Beispiel #1
0
        public void TestMethod1()
        {
            var imageFinder    = new ImageFinder();
            var imageFileInfos = imageFinder.Find(false);
            var imageCopier    = new ImageCopier(@"G:\OneDrive\Documents\WallPapers\BingWallpaper", imageFileInfos);

            imageCopier.CopyMissingImages();
        }
Beispiel #2
0
        private void Initialise(string folder)
        {
            _imageFinder = new ImageFinder();
            var fileInfos = _imageFinder.Find();

            _imageCopier = new ImageCopier(folder, fileInfos);
            _checksum    = new Checksum(_imageCopier);
        }
Beispiel #3
0
        void AssertCopy(Size srcSize, int[] srcPixels, Size destSize, int[] destPixels, Point location, int[] expectedResultPixels)
        {
            var scrImage = new IndexedImage {
                Size = srcSize
            };

            srcPixels.CopyTo(scrImage.Pixels, 0);

            var destImage = new IndexedImage {
                Size = destSize
            };

            destPixels.CopyTo(destImage.Pixels, 0);

            ImageCopier.Copy(scrImage, destImage, location);

            for (int i = 0; i < expectedResultPixels.Length; i++)
            {
                Assert.AreEqual(expectedResultPixels[i], destImage.Pixels[i], $"Incorrect pixel in position {i}.");
            }
        }
Beispiel #4
0
    public MagitekResult ApplyPasteInternal(ArrangerPaste paste)
    {
        int destX   = Math.Max(0, paste.Rect.SnappedLeft);
        int destY   = Math.Max(0, paste.Rect.SnappedTop);
        int sourceX = paste.Rect.SnappedLeft >= 0 ? 0 : -paste.Rect.SnappedLeft;
        int sourceY = paste.Rect.SnappedTop >= 0 ? 0 : -paste.Rect.SnappedTop;

        var destStart   = new Point(destX, destY);
        var sourceStart = new Point(sourceX, sourceY);

        ArrangerCopy copy;

        if (paste?.Copy is ElementCopy elementCopy)
        {
            copy = elementCopy.ToPixelCopy();
        }
        else
        {
            copy = paste?.Copy;
        }

        if (copy is IndexedPixelCopy indexedCopy)
        {
            int copyWidth  = Math.Min(copy.Width - sourceX, _directImage.Width - destX);
            int copyHeight = Math.Min(copy.Height - sourceY, _directImage.Height - destY);

            return(ImageCopier.CopyPixels(indexedCopy.Image, _directImage, sourceStart, destStart, copyWidth, copyHeight));
        }
        else if (copy is DirectPixelCopy directCopy)
        {
            int copyWidth  = Math.Min(copy.Width - sourceX, _directImage.Width - destX);
            int copyHeight = Math.Min(copy.Height - sourceY, _directImage.Height - destY);

            return(ImageCopier.CopyPixels(directCopy.Image, _directImage, sourceStart, destStart, copyWidth, copyHeight));
        }
        else
        {
            throw new InvalidOperationException($"{nameof(ApplyPasteInternal)} attempted to copy from an arranger of type {Paste.Copy.Source.ColorType} to {WorkingArranger.ColorType}");
        }
    }
        public void FinishMoveSelection()
        {
            if (GridPainter.InsertedBlock != null)
            {
                using (SuspendUpdateVisualImage())
                    using (SourceImage.Palette.SuppressRemoveColorsWithoutOccurrences())
                        using (UndoRedo.BeginMultiActionsUndoRedoStep(UndoRedoProvider.UndoRedoActionPaste))
                        {
                            ImageCopier.CopyWithPalette(GridPainter.InsertedBlock, SourceImage, new Point(SelectedRect.Left, SelectedRect.Top));

                            GridPainter.InsertedBlock = null;

                            if (MouseMode == MouseActionMode.MoveSelection)
                            {
                                MouseMode = MouseActionMode.Shift;
                            }

                            UpdateVisualImage();
                            SourceImage.TriggerImageChanged();
                        }
            }
        }
        protected override void UpdateVisualImageCore()
        {
            base.UpdateVisualImageCore();

            VisualImage.Size = ImageBoxSize;
            ImagePainter.FillRect(VisualImage, new Rectangle(0, 0, VisualImage.Size.Width, VisualImage.Size.Height), BlackColorArgb);

            if (PagePrintSize.Width <= 0 || PagePrintSize.Height <= 0 || PrintSchemePagesCount.Width <= 0 || PrintSchemePagesCount.Height <= 0 || pageThumbnailSize.Width <= 0 || pageThumbnailSize.Height <= 0)
            {
                return;
            }

            var imageVisualPartSize = new Size(pageThumbnailSize.Width - PreviewPageBorder * 2, pageThumbnailSize.Height - PreviewPageBorder * 2);

            var pageWithMarginHeight = pageThumbnailSize.Height + PreviewPagesMargin;
            var startY = (VisualImage.Size.Height - pageWithMarginHeight * PrintSchemePagesCount.Height + PreviewPagesMargin) / 2;

            var pageWithMarginWidth = pageThumbnailSize.Width + PreviewPagesMargin;
            var palettePagesColumns = (PrintPalettePagesCount + PrintSchemePagesCount.Height - 1) / PrintSchemePagesCount.Height;
            var actualColumnsCount  = PrintSchemePagesCount.Width + palettePagesColumns;
            var startX = (VisualImage.Size.Width - pageWithMarginWidth * actualColumnsCount) / 2;

            if (startX < 0)
            {
                startX = 0;
            }

            var schemePagesCount = PrintSchemePagesCount.Width * PrintSchemePagesCount.Height;

            for (int row = 0, y = startY, srcY = 0;
                 row < PrintSchemePagesCount.Height;
                 row++, y += pageWithMarginHeight, srcY += PageCellsSize.Height)
            {
                for (int col = 0, x = startX, srcX = 0;
                     col < actualColumnsCount;
                     col++, x += pageWithMarginWidth, srcX += PageCellsSize.Width)
                {
                    var actualX = x;
                    if (col >= PrintSchemePagesCount.Width)
                    {
                        actualX += PreviewPageBorder * 2;
                    }

                    if (col < PrintSchemePagesCount.Width && imageVisualPartSize.Width > 0 && imageVisualPartSize.Height > 0)
                    {
                        ImagePainter.FillRect(VisualImage, new Rectangle(actualX, y, pageThumbnailSize.Width, pageThumbnailSize.Height), WhiteColorArgb);

                        var sourceCropRect = new Rectangle(srcX, srcY, PageCellsSize.Width, PageCellsSize.Height);
                        if (sourceCropRect.RightExclusive > SourceImage.Size.Width)
                        {
                            sourceCropRect.Width = SourceImage.Size.Width - srcX;
                        }
                        if (sourceCropRect.BottomExclusive > SourceImage.Size.Height)
                        {
                            sourceCropRect.Height = SourceImage.Size.Height - srcY;
                        }
                        var croppedImage = ImageCropper.Crop(SourceImage, sourceCropRect);

                        var zoomSize        = new Size(sourceCropRect.Width * imageVisualPartSize.Width / PageCellsSize.Width, sourceCropRect.Height * imageVisualPartSize.Height / PageCellsSize.Height);
                        var zoomedPartImage = new ImageResampler().Resample(croppedImage, zoomSize, ImageResampler.FilterType.Box);

                        ImageCopier.Copy(zoomedPartImage, VisualImage, new Point(actualX + PreviewPageBorder, y + PreviewPageBorder));

                        PaintPageNumber(row * PrintSchemePagesCount.Width + col + 1, actualX, y);
                    }
                    else if (row * palettePagesColumns + col - PrintSchemePagesCount.Width + schemePagesCount < PagesCount)
                    {
                        ImagePainter.FillRect(VisualImage, new Rectangle(actualX, y, pageThumbnailSize.Width, pageThumbnailSize.Height), WhiteColorArgb);

                        var lineX      = actualX + PreviewPageBorder;
                        var lineLength = pageThumbnailSize.Width / 2;
                        var lastLineY  = y + pageThumbnailSize.Height - PreviewPageBorder * 2;
                        for (int lineY = y + PreviewPageBorder; lineY < lastLineY; lineY += 3)
                        {
                            ImagePainter.DrawHorizontalLine(VisualImage, lineX, lineY, lineLength, BlackColorArgb);
                        }

                        PaintPageNumber(schemePagesCount + row + (col - PrintSchemePagesCount.Width) * PrintSchemePagesCount.Height + 1, actualX, y);
                    }
                }
            }
        }
Beispiel #7
0
 void IPainter.PaintImage(IndexedImage image, Point atPoint)
 {
     atPoint = new Point(atPoint.X + Shift.Width, atPoint.Y + Shift.Height);
     ImageCopier.Copy(image, Canvas, atPoint);
 }
Beispiel #8
0
 public void PaintCross(int color, IndexedImage image, Size imageSize, Point atPoint, Rectangle clipRect = default(Rectangle))
 {
     ImageCopier.Copy(GetCross(color), image, atPoint);
 }