public void TestMethod1() { var imageFinder = new ImageFinder(); var imageFileInfos = imageFinder.Find(false); var imageCopier = new ImageCopier(@"G:\OneDrive\Documents\WallPapers\BingWallpaper", imageFileInfos); imageCopier.CopyMissingImages(); }
private void Initialise(string folder) { _imageFinder = new ImageFinder(); var fileInfos = _imageFinder.Find(); _imageCopier = new ImageCopier(folder, fileInfos); _checksum = new Checksum(_imageCopier); }
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}."); } }
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); } } } }
void IPainter.PaintImage(IndexedImage image, Point atPoint) { atPoint = new Point(atPoint.X + Shift.Width, atPoint.Y + Shift.Height); ImageCopier.Copy(image, Canvas, atPoint); }
public void PaintCross(int color, IndexedImage image, Size imageSize, Point atPoint, Rectangle clipRect = default(Rectangle)) { ImageCopier.Copy(GetCross(color), image, atPoint); }