Beispiel #1
0
        public void BuildForegroundImage_Theory(int docNumber)
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(docNumber, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page          = document.FirstPage;
                var       testImagePath = Path.Combine(Util.RepoRoot, "artifacts", "data", $"test{docNumber:00#}CFgnd.png");

                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.GetForegroundImage(1, true))
                    using (Bitmap testImage = new Bitmap(testImagePath))
                    {
                        Assert.NotNull(image);
                        Assert.IsType <Bitmap>(image);

                        if (image.Width != testImage.Width || image.Height != testImage.Height)
                        {
                            Assert.True(false, $"Unexpected image size differences. Width image: {image.Width} | testImage: {testImage.Width}, Height: image: {image.Height} | testImage {testImage.Height}");
                        }

                        bool result = Util.CompareImagesForBinarySimilarity(testImage, image, 0.025, true, $"Testing Djvu foreground: \ttest{docNumber:00#}C.png, ");

#if DUMP_IMAGES
                        DumpImage(docNumber, image, "Fgnd");
#endif

                        Assert.True(result);
                    }
            }
        }
        public void LoadTest078()
        {
            string file = Path.Combine(Util.ArtifactsPath, "test078C.djvu");

            using (DjvuDocument document = new DjvuDocument())
            {
                int hash = file.GetHashCode();
                document.Load(file, hash);
                Assert.Equal(hash, document.Identifier);
                IDjvuPage page = document.ActivePage;

                PM44Chunk pmChunk = page.PageForm.Children[0] as PM44Chunk;
                Assert.IsType <PM44Chunk>(pmChunk);

                var img = pmChunk.Image;
                Assert.NotNull(img);

                var pixMap = new Wavelet.InterWavePixelMapDecoder();
                pixMap = pmChunk.ProgressiveDecodeBackground(pixMap) as Wavelet.InterWavePixelMapDecoder;
                Assert.NotNull(pixMap);

                pmChunk = page.PageForm.Children[1] as PM44Chunk;
                Assert.NotNull(pmChunk);

                var pixMap2 = new Wavelet.InterWavePixelMapDecoder();
                Assert.Throws <DjvuFormatException>(() => pmChunk.ProgressiveDecodeBackground(pixMap2));

                // This time call will not throw
                pmChunk.ProgressiveDecodeBackground(pixMap);
            }
        }
Beispiel #3
0
        public void Image003()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(3, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);

                IDjvuPage page          = document.FirstPage;
                var       testImagePath = Path.Combine(Util.ArtifactsDataPath, "test003C.png");

                DjvuImage djvuImage = page.Image as DjvuImage;
                using (var image = djvuImage.Image)
                    using (Bitmap testImage = new Bitmap(testImagePath))
                    {
                        Assert.NotNull(image);
                        Assert.IsType <Bitmap>(image);
                        Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);

                        BitmapData data     = image.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
                        BitmapData testData = testImage.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

                        bool result = Util.CompareImages(data, testData);

                        image.UnlockBits(data);
                        testImage.UnlockBits(testData);
                        //image.Save(Path.Combine(Util.RepoRoot, "artifacts", "data", "dumps", "test003CImage003n.png"));

                        //Assert.True(result);
                    }
            }
        }
Beispiel #4
0
        public void BuildMaskImage_Theory(int docNumber, double tolerance)
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(docNumber, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page          = document.FirstPage;
                var       testImagePath = Path.Combine(Util.RepoRoot, "artifacts", "data", $"test{docNumber:00#}Cmask.png");

                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.GetMaskImage(1, true))
                    using (Bitmap testImage = new Bitmap(testImagePath))
                    {
                        Assert.NotNull(image);
                        Assert.IsType <Bitmap>(image);

                        using Bitmap invertedImage = DjvuImage.InvertImage(image);

                        bool result = Util.CompareImagesForBinarySimilarity(testImage, invertedImage, tolerance, true, $"Testing Djvu mask: \t\ttest{docNumber:00#}C.png, ");

#if DUMP_IMAGES
                        DumpIage(docNumber, image, "Mask");
#endif
                        Assert.True(result);
                    }
            }
        }
Beispiel #5
0
        public void BuildImage_Theory(int docNumber)
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(docNumber, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page          = document.FirstPage;
                var       testImagePath = Path.Combine(Util.RepoRoot, "artifacts", "data", $"test{docNumber:00#}C.png");

                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.BuildImage())
                    using (Bitmap testImage = new Bitmap(testImagePath))
                    {
                        Assert.NotNull(image);
                        Assert.IsType <Bitmap>(image);

                        bool result = Util.CompareImagesForBinarySimilarity(testImage, image, docNumber == 75 ? 0.1485 : 0.0585, true, $"Testing Djvu image: \t\ttest{docNumber:00#}C.png, ");

#if DUMP_IMAGES
                        DumpImage(docNumber, image, "Img");
#endif
                        Assert.True(result, $"Test failed: ");
                    }
            }
        }
Beispiel #6
0
        public void CreateBlankImageTest()
        {
            Mock <IDjvuPage>     pageMock     = new Mock <IDjvuPage>();
            Mock <IDjvuDocument> documentMock = new Mock <IDjvuDocument>();

            pageMock.Setup(x => x.Document).Returns(documentMock.Object);
            pageMock.Setup(x => x.Width).Returns(100);
            pageMock.Setup(x => x.Height).Returns(200);
            IDjvuPage page = pageMock.Object;

            DjvuImage image = new DjvuImage(page);

            Assert.Same(pageMock.Object, image.Page);
            Assert.Same(documentMock.Object, image.Document);

            using (Bitmap bitmap = image.CreateBlankImage(Brushes.White))
            {
                Assert.Equal <int>(page.Width, bitmap.Width);
                Assert.Equal <int>(page.Height, bitmap.Height);
                Color c = bitmap.GetPixel(0, 0);
                Assert.Equal <byte>(0xff, c.A);
                Assert.Equal <byte>(0xff, c.B);
                Assert.Equal <byte>(0xff, c.G);
                Assert.Equal <byte>(0xff, c.R);
            }
        }
Beispiel #7
0
        public DjvuImage(IDjvuPage page)
        {
            if (page == null)
            {
                throw new DjvuArgumentNullException(nameof(page));
            }

            _Page = page;
            _Page.PropertyChanged += PagePropertyChanged;
            _Document              = page.Document;
        }
Beispiel #8
0
        public void GetTextForLocationTest002()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(2, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page   = document.ActivePage;
                string    result = page.GetTextForLocation(new Rectangle(0, 0, page.Width, page.Height));
                Assert.False(String.IsNullOrWhiteSpace(result));
            }
        }
Beispiel #9
0
        public void BuildBitmap001()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(2, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage          page = document.Pages[0];
                Graphics.Rectangle rect = new Graphics.Rectangle(100, 0, 100, 100);
                var bitmap = page.BuildBitmap(rect, 1, 1, null);
                Assert.NotNull(bitmap);
            }
        }
Beispiel #10
0
        public void GetTextForLocationTest001()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(30, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page   = document.ActivePage;
                string    result = page.GetTextForLocation(new Rectangle(0, 0, page.Width, page.Height));
                Assert.NotNull(result);
                Assert.Equal(String.Empty, result);
            }
        }
Beispiel #11
0
        internal void BuildNavigation(IDjvuDocument document)
        {
            List <Bookmark> bookmarks = new List <Bookmark>();

            for (int x = 0; x < document.Pages.Count; x++)
            {
                IDjvuPage page    = document.Pages[x];
                int       pageNum = x + 1;
                bookmarks.Add(new Bookmark(document, null, null,
                                           string.Format("Page {0}", pageNum), string.Format("#{0}", pageNum), new Bookmark[0]));
            }

            Bookmarks = bookmarks;
        }
Beispiel #12
0
        public void Preload001()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(1, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);

                IDjvuPage page = document.Pages[11];
                page.Image.Preload();
                Bitmap image = ((DjvuImage)page.Image).Image;
                Assert.NotNull(image);
                Assert.IsType <Bitmap>(image);
            }
        }
Beispiel #13
0
        public void IncludesTest()
        {
            int pageCount = 0;

            using (DjvuDocument document = DjvuNet.Tests.Util.GetTestDocument(2, out pageCount))
            {
                DjvuNet.Tests.Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page = document.FirstPage;
                DjvuChunk form = page.PageForm as DjvuChunk;
                Assert.NotNull(form);

                var includes = form.Includes;
                Assert.NotNull(includes);
                Assert.Equal(1, includes.Count);
            }
        }
Beispiel #14
0
        public void ExtractRawDataTest()
        {
            int pageCount = 0;

            using (DjvuDocument document = DjvuNet.Tests.Util.GetTestDocument(2, out pageCount))
            {
                DjvuNet.Tests.Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page = document.FirstPage;
                DjvuChunk form = page.PageForm as DjvuChunk;
                Assert.NotNull(form);

                var reader = form.ExtractRawData();
                Assert.NotNull(reader);
                Assert.Equal(form.Length, reader.Length);
            }
        }
Beispiel #15
0
        private static void TestPageText(string expectedValue, IDjvuPage page)
        {
            var text = page.Text;

            if (expectedValue != null)
            {
                Assert.NotNull(text);
                Assert.IsType <string>(text);
                Assert.True(text.Contains(expectedValue),
                            $"Test text and page text does not match.\n Expected:\n\n{expectedValue}\n\nActual:\n\n{text}\n\n");
            }
            else
            {
                Assert.Null(text);
            }
        }
Beispiel #16
0
        public void InvertImage010()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(10, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);

                IDjvuPage  page  = document.FirstPage;
                IDjvuImage image = page.Image;
                Assert.NotNull(image);
                Assert.IsType <DjvuImage>(image);
                Assert.NotNull(image.Image);
                Assert.IsType <Bitmap>(image.Image);
            }
        }
Beispiel #17
0
        public void ResizeImage0011()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(4, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page      = document.ActivePage;
                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.ResizeImage(64, 64))
                {
                    Assert.NotNull(image);
                    Assert.Equal(64, image.Width);
                    Assert.Equal(64, image.Height);
                }
            }
        }
Beispiel #18
0
        public void BuildImage001()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(1, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);

                IDjvuPage page      = document.FirstPage;
                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.BuildImage())
                {
                    Assert.NotNull(image);
                    Assert.IsType <Bitmap>(image);
                    //image.Save(Path.Combine(Util.RepoRoot, "artifacts", "data", "dumps", "test001CBuildImagen.png"));
                }
            }
        }
Beispiel #19
0
        public void BuildImage002i()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(2, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);

                IDjvuPage page = document.FirstPage;
                page.IsInverted = true;
                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.BuildImage())
                {
                    Assert.NotNull(image);
                    Assert.IsType <Bitmap>(image);
                }
            }
        }
Beispiel #20
0
        public void ExtractThumbnailImage058()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(58, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);

                IDjvuPage page = document.FirstPage;

                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.ExtractThumbnailImage())
                {
                    Assert.NotNull(image);
                    Assert.IsType <Bitmap>(image);
                }
            }
        }
Beispiel #21
0
        public void ClearImage002()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(2, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);
                IDjvuPage page      = document.FirstPage;
                var       djvuImage = page.Image as DjvuImage;
                Assert.NotNull(djvuImage);
                Bitmap image = djvuImage.Image;

                Assert.NotNull(image);
                ImageFormat format = image.RawFormat;

                page.Image.ClearImage();
                Assert.Throws <ArgumentException>(() => image.RawFormat);
            }
        }
Beispiel #22
0
        public void BuildPageImage075()
        {
            int pageCount = 0;

            using (DjvuDocument document = Util.GetTestDocument(75, out pageCount))
            {
                Util.VerifyDjvuDocument(pageCount, document);

                IDjvuPage page          = document.FirstPage;
                var       testImagePath = Path.Combine(Util.RepoRoot, "artifacts", "data", "test075C.png");

                DjvuImage djvuImage = page.Image as DjvuImage;
                using (Bitmap image = djvuImage.BuildImage())
                    using (Bitmap testImage = new Bitmap(testImagePath))
                    {
                        Assert.NotNull(image);
                        Assert.IsType <Bitmap>(image);

                        bool result = Util.CompareImagesForBinarySimilarity(testImage, image, 0.15);

                        Assert.True(result);
                    }
            }
        }
Beispiel #23
0
 public PageTextSearch(IDjvuPage page, TextZone[] items)
     : base(page)
 {
     TextItems = items.Select(x => new PageTextItem(page, this, x)).ToArray();
 }
Beispiel #24
0
 public PageTextItem(IDjvuPage page, PageTextSearch parent, TextZone zone)
     : base(page)
 {
     Zone   = zone;
     Parent = parent;
 }
Beispiel #25
0
        private static void BenchmarkBuildPageImageCall(int testsToSkip, long[] elapsed, int i, int docNo,
                                                        Stopwatch watch, string fileName, IDjvuPage page, int imageNo = 1)
        {
            watch.Restart();
            using (System.Drawing.Bitmap bmp = ((DjvuImage)((DjvuPage)page).Image).BuildPageImage())
            {
                watch.Stop();
                Console.WriteLine($"Image {docNo + 1} - {imageNo} generated in\t{watch.ElapsedTicks:000 000 000 000}");
                if (i + 1 > testsToSkip)
                {
                    elapsed[docNo * 3 + imageNo] += watch.ElapsedTicks;
                }

                //bmp.Save(fileName + $"Mn_{imageNo}.png", ImageFormat.Png);
            }
        }
Beispiel #26
0
        public void EncodeImage_Theory(string fileName)
        {
            string file    = Path.Combine(Util.ArtifactsPath, fileName);
            string outFile = Path.Combine(Util.ArtifactsDataPath, fileName + ".djvu");

            using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(file))
            {
                bmp.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipX);
                int       width  = bmp.Width;
                int       height = bmp.Height;
                IPixelMap pixMap = PixelMapFromBitmap(bmp);

                var map = new InterWavePixelMapEncoder();
                map.InitializeEncoder(pixMap, null, YCrCbMode.Full);

                const int nchunks = 4;
                int[]     slices  = new int[] { 74, 90, 98, 103 };
                //float[] decibel = new float[] { 5.0f, 10.0f, 15.0f, 20.0f };

                InterWaveEncoderSettings[] settings = new InterWaveEncoderSettings[nchunks];
                if (fileName != "")
                {
                    for (int i = 0; i < nchunks; i++)
                    {
                        settings[i] = new InterWaveEncoderSettings {
                            Slices = slices[i]
                        };
                    }
                }
                //else
                //{
                //    for (int i = 0; i < nchunks; i++)
                //    {
                //        settings[i] = new InterWaveEncoderSettings
                //        {
                //            Decibels = decibel[i]
                //        };
                //    }
                //}

                DjvuFormElement form = null;
                using (MemoryStream stream = new MemoryStream())
                    using (IDjvuWriter writer = new DjvuWriter(stream))
                    {
                        form = map.EncodeImage(writer, nchunks, settings);
                    }

                using (IDjvuWriter writer = new DjvuWriter(outFile))
                {
                    form.WriteData(writer);
                }

                using (DjvuDocument doc = new DjvuDocument(outFile))
                {
                    IDjvuPage page     = doc.Pages[0];
                    PM44Form  pageForm = (PM44Form)page.PageForm;

                    if (nchunks != pageForm.Children.Count)
                    {
                        Assert.True(false);
                    }

                    if (nchunks != form.Children.Count)
                    {
                        Assert.True(false);
                    }

                    Assert.IsType <PM44Form>(form);

                    for (int i = 0; i < nchunks; i++)
                    {
                        IDjvuNode c = form.Children[i];

                        if (c == null)
                        {
                            Assert.True(false);
                        }

                        byte[] chunkDataBuffer = null;
                        if (!(c is PM44Chunk chunk))
                        {
                            Assert.True(false);
                        }
Beispiel #27
0
 public PageTextSearch(IDjvuPage page, PageTextItem[] items)
     : base(page)
 {
     TextItems = items;
 }
Beispiel #28
0
        public void EncodeImage_Theory(string fileName)
        {
            string file    = Path.Combine(Util.ArtifactsPath, fileName);
            string outFile = Path.Combine(Util.ArtifactsDataPath, fileName + ".djvu");

            using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(file))
            {
                bmp.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipX);
                int width  = bmp.Width;
                int height = bmp.Height;
                var pixMap = PixelMapFromBitmap(bmp);

                var map = new InterWavePixelMapEncoder();
                map.InitializeEncoder(pixMap, null, YCrCbMode.Full);

                int   nchunks = 4;
                int[] slices  = new int[] { 74, 90, 98, 103 };
                //float[] decibel = new float[] { 5.0f, 10.0f, 15.0f, 20.0f };

                InterWaveEncoderSettings[] settings = new InterWaveEncoderSettings[nchunks];
                if (fileName != "")
                {
                    for (int i = 0; i < nchunks; i++)
                    {
                        settings[i] = new InterWaveEncoderSettings
                        {
                            Slices = slices[i]
                        };
                    }
                }
                //else
                //{
                //    for (int i = 0; i < nchunks; i++)
                //    {
                //        settings[i] = new InterWaveEncoderSettings
                //        {
                //            Decibels = decibel[i]
                //        };
                //    }
                //}

                DjvuFormElement form = null;
                using (MemoryStream stream = new MemoryStream())
                    using (IDjvuWriter writer = new DjvuWriter(stream))
                        form = map.EncodeImage(writer, nchunks, settings);

                using (IDjvuWriter writer = new DjvuWriter(outFile))
                    form.WriteData(writer);

                using (DjvuDocument doc = new DjvuDocument(outFile))
                {
                    IDjvuPage page     = doc.Pages[0];
                    PM44Form  pageForm = (PM44Form)page.PageForm;
                    Assert.Equal(nchunks, pageForm.Children.Count);

                    Assert.NotNull(form);
                    Assert.Equal(nchunks, form.Children.Count);
                    Assert.IsType <PM44Form>(form);
                    for (int i = 0; i < form.Children.Count; i++)
                    {
                        var c = form.Children[i];
                        Assert.NotNull(c);
                        Assert.IsType <PM44Chunk>(c);
                        PM44Chunk chunk = (PM44Chunk)c;
                        Assert.NotNull(chunk.ChunkData);
                        if (chunk.ChunkData.Length >= 2)
                        {
                            Assert.Equal(i, chunk.ChunkData[0]);
                            Assert.Equal(slices[i] - (i == 0 ? 0 : slices[i - 1]), chunk.ChunkData[1]);
                            if (i == 0)
                            {
                                Assert.Equal(1, chunk.ChunkData[2]);
                                Assert.Equal(2, chunk.ChunkData[3]);

                                int widthTest = chunk.ChunkData[4] << 8;
                                widthTest |= chunk.ChunkData[5];
                                Assert.Equal(bmp.Width, widthTest);

                                int heightTest = chunk.ChunkData[6] << 8;
                                heightTest |= chunk.ChunkData[7];
                                Assert.Equal(bmp.Height, heightTest);
                            }
                        }
                    }
                }
            }
        }
Beispiel #29
0
 public PageText(IDjvuPage page)
 {
     Page = page;
 }