Пример #1
0
        public void TestCropArc()
        {
            var srcImage = new IndexedImage {
                Size = new Size(10, 10)
            };

            int[] pixels;
            using (srcImage.LockPixels(out pixels))
            {
                for (int i = 0; i < pixels.Length; i++)
                {
                    pixels[i] = 100;
                }
            }

            var dstImage = ImageCropper.Crop(srcImage, new Rectangle(1, 1, 8, 8), ImageCropper.CropKind.Arc);

            dstImage.CompletePalette();

            Assert.AreEqual(new Size(8, 8), dstImage.Size);
            Assert.AreEqual(new Color(255, 255, 255), dstImage[0, 0]);
            Assert.AreEqual(new Color(255, 255, 255), dstImage[0, 7]);
            Assert.AreEqual(new Color(255, 255, 255), dstImage[7, 0]);
            Assert.AreEqual(new Color(255, 255, 255), dstImage[7, 7]);
            Assert.AreEqual(new Color(100), dstImage[4, 4], "Some point in the centre");
        }
Пример #2
0
        public void TestCropRect()
        {
            var srcImage = new IndexedImage {
                Size = new Size(5, 5)
            };

            int[] pixels;
            using (srcImage.LockPixels(out pixels))
            {
                for (int i = 0; i < pixels.Length; i++)
                {
                    pixels[i] = i;
                }
            }

            var dstImage = ImageCropper.Crop(srcImage, new Rectangle(2, 1, 2, 3), ImageCropper.CropKind.Rectangle);

            Assert.AreEqual(new Size(2, 3), dstImage.Size);
            using (dstImage.LockPixels(out pixels))
            {
                Assert.AreEqual(6, pixels.Length);
                Assert.AreEqual(7, pixels[0]);
                Assert.AreEqual(8, pixels[1]);
                Assert.AreEqual(12, pixels[2]);
                Assert.AreEqual(13, pixels[3]);
                Assert.AreEqual(17, pixels[4]);
                Assert.AreEqual(18, pixels[5]);
            }
        }
Пример #3
0
        internal IndexedImage GetCross(int color)
        {
            var index      = random.Next(CrossesPerWhiteImage);
            var row        = index / CrossesPerWhiteImageGridSize;
            var col        = index % CrossesPerWhiteImageGridSize;
            var crossImage = ImageCropper.Crop(GetCrossesImage(color), new Rectangle(col * PixelHeight, row * PixelHeight, PixelHeight, PixelHeight));

            return(crossImage);
        }
Пример #4
0
 protected override void UpdateVisualImageCore()
 {
     if (ZoomPercent == 100)
     {
         if (VisualImageFrame.Width == SourceImage.Size.Width && VisualImageFrame.Height == SourceImage.Size.Height)
         {
             VisualImage.Size = SourceImage.Size;
             SourceImage.Pixels.CopyTo(VisualImage.Pixels, 0);
         }
         else
         {
             ImageCropper.Crop(SourceImage, VisualImageFrame, ImageCropper.CropKind.Rectangle, VisualImage);
         }
     }
     else
     {
         new ImageResampler().Resample(SourceImage, ZoomedImageSize, ZoomPercent > 100 ? UpscaleFilterType : DownscaleFilterType, VisualImageFrame, VisualImage);
     }
 }
        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);
                    }
                }
            }
        }
Пример #6
0
 public void CropArc(Rectangle cropRect)
 {
     ImageCropper.Crop(SourceImage, cropRect, ImageCropper.CropKind.Arc, ManipulatedImage);
     OnImageChanged();
 }