예제 #1
0
        public void splitFragCompletness()
        {
            WebtoonPage page = new WebtoonPage()
            {
                filpath = "",
                width   = 800,
                height  = 12480,
            };

            var PageA4 = Bindings.TemplatesTools.getA4(96, false);

            List <PageFragmnet> listToPrint = new DuplexBuilder(new Tools.LoggerHelper("test"), PageA4,
                                                                3,
                                                                padPercent: 2.3f,
                                                                repeatColPercent: 2.3f
                                                                ).splitPageLandscape(
                page
                );

            Assert.IsTrue(listToPrint.Count > 1);
            if (listToPrint.Count > 1)
            {
                printFrags(listToPrint);

                int TotalHeight = 0;
                for (int i = 0; i < listToPrint.Count; i++)
                {
                    TotalHeight += listToPrint[i].SourceTransform.Height;
                }

                Assert.AreEqual(page.height, TotalHeight);
            }
        }
예제 #2
0
        static void Duplex(DuplexOptions opt)
        {
            DuplexBuilder duplexBuilder = new DuplexBuilder(
                new LoggerHelper("duplex"), TemplatesTools.getA4(150, !(opt.Landscape ?? true)), opt.Columns,
                padPercent: opt.Padding, spacePercent: opt.Spacing);

            Action <string> _file_job = new Action <string>((string input_file) =>
            {
                TryProcessFile("duplex-job-single", input_file, opt.OutputFolder, (file, output_file, log) =>
                {
                    duplexBuilder.saveCahpterFragmentsInto_PNG_LTR(
                        SplitFile(opt, input_file, file, output_file, log, duplexBuilder),
                        "",
                        opt.OutputFolder);
                });
            });


            List <PageFragmnet> dirFragments = new List <PageFragmnet>();
            Action <string, DirectoryInfo, string> _file_nested_job =
                new Action <string, DirectoryInfo, string>((string input_file, DirectoryInfo dir, string inputDir) =>
            {
                TryProcessFile("duplex-job-nested", input_file, opt.OutputFolder, (file, output_file, log) =>
                {
                    dirFragments.AddRange(
                        SplitFile(opt, input_file, file, output_file, log, duplexBuilder));
                });
            });

            Action <string, DirectoryInfo, bool> onDir = new Action <string, DirectoryInfo, bool>(
                (string inputFolder, DirectoryInfo currentInputDir, bool started) =>
            {
                if (!started)
                {
                    DirectoryInfo currentOutputDir = new DirectoryInfo(currentInputDir.FullName.Replace(inputFolder, opt.OutputFolder));
                    if (!currentOutputDir.Exists)
                    {
                        currentOutputDir.Create();
                    }
                    log.i("Saving fragments after folder to " + currentOutputDir.FullName);
                    duplexBuilder.saveCahpterFragmentsInto_PNG_LTR(dirFragments, "", currentOutputDir.FullName);
                }
                else
                {
                    dirFragments = new List <PageFragmnet>();
                }
            });

            ProcessAllFiles(opt, _file_job, nestedFileJob: _file_nested_job, onDirecotry: onDir, fileExt: "*.png");
        }
예제 #3
0
        public void CombiningTwoSplittedStripsTogether2()
        {
            Size          A4            = Bindings.TemplatesTools.getA4(96, false);
            DuplexBuilder duplexBuilder = new DuplexBuilder(
                new Tools.LoggerHelper("test"),
                A4,
                3,
                padPercent: 0f
                );

            WebtoonPage page = new WebtoonPage()
            {
                filpath = "p1.png",
                width   = 690,
                height  = 212,
            };
            WebtoonPage page2 = new WebtoonPage()
            {
                filpath = "p2.png",
                width   = 690,
                height  = 1885,
            };

            DrawMock mock = new DrawMock();


            List <PageFragmnet> fragmantsToRead = new List <PageFragmnet>();

            fragmantsToRead.AddRange(duplexBuilder.splitPageLandscape(page));
            fragmantsToRead.AddRange(duplexBuilder.splitPageLandscape(page2));

            printFrags(fragmantsToRead);

            var outputPages = duplexBuilder.saveCahpterFragmentsInto_PNG_LTR(
                fragmantsToRead,
                "",
                "",
                mock: mock
                );

            var usedColumns     = outputPages.Sum((p) => p.ColCount());
            var usedPrintOrders = outputPages.Sum((p) => (p.GetCols.Sum((c) => c.getPrintSources.Count)));

            Assert.AreEqual(4, usedPrintOrders);

            CheckDrawInsideBounds(mock, usedColumns, 2);
        }
예제 #4
0
        public void splitPageTest2()
        {
            /*
             *  Webtoon
             *      W	690
             *      H	1885
             *
             *      A4
             *           W  1123
             *           H  794
             *
             *      Col	 3
             *      Pad     25
             *
             *      FinalWidth	341
             *      FinalHeight	744
             *
             *      Webtoon
             *      Scale	2.53360
             *      W	341
             *      H	931
             *
             *      Frag	7.15
             *
             *      SplitRepeat	25
             *      Total Cols	7.385215054
             *
             */

            WebtoonPage page = new WebtoonPage()
            {
                filpath = "",
                width   = 690,
                height  = 1885,
            };
            List <PageFragmnet> listToPrint = new DuplexBuilder(
                new Tools.LoggerHelper("test"),
                Bindings.TemplatesTools.getA4(96, false),
                3,
                padPercent: 2.3f
                ).splitPageLandscape(
                page
                );

            Assert.AreEqual(2, listToPrint.Count);
        }
예제 #5
0
        public void CombiningTwoSplittedStripsTogether()
        {
            Size          A4            = Bindings.TemplatesTools.getA4(96, false);
            DuplexBuilder duplexBuilder = new DuplexBuilder(
                new Tools.LoggerHelper("test"),
                A4,
                3,
                padPercent: 0f
                );

            int colW = A4.Width / 3;
            int colH = A4.Height;

            WebtoonPage page = new WebtoonPage()
            {
                filpath = "p1.png",
                width   = colW,
                height  = (int)(colH * 1.2f),
            };
            WebtoonPage page2 = new WebtoonPage()
            {
                filpath = "p2.png",
                width   = colW,
                height  = (int)(colH * 1.2f),
            };

            DrawMock            mock            = new DrawMock();
            List <PageFragmnet> fragmantsToRead = new List <PageFragmnet>();

            fragmantsToRead.AddRange(duplexBuilder.splitPageLandscape(page));
            fragmantsToRead.AddRange(duplexBuilder.splitPageLandscape(page2));

            printFrags(fragmantsToRead);

            var outputPages = duplexBuilder.saveCahpterFragmentsInto_PNG_LTR(
                fragmantsToRead,
                "",
                "",
                mock: mock
                );

            var usedColumns = outputPages.Sum((p) => p.ColCount());

            CheckDrawInsideBounds(mock, usedColumns, 3);
        }
예제 #6
0
        public void splitFragCompletness2()
        {
            var PageA4 = Bindings.TemplatesTools.getA4(96, false);

            int stripW = PageA4.Width / 3;                      // 1/3 so height is exact
            int stripH = PageA4.Height * 2 + PageA4.Height / 2; //2.5

            WebtoonPage toonStrip = new WebtoonPage()
            {
                filpath = "",
                width   = stripW,
                height  = stripH,
            };

            List <PageFragmnet> listToPrint = new DuplexBuilder(new Tools.LoggerHelper("test"), PageA4,
                                                                3,
                                                                padPercent: 0,
                                                                repeatColPercent: 0
                                                                ).splitPageLandscape(
                toonStrip
                );

            Assert.IsTrue(listToPrint.Count > 1);
            if (listToPrint.Count > 1)
            {
                printFrags(listToPrint);

                int TotalHeight = 0;
                for (int i = 0; i < listToPrint.Count; i++)
                {
                    TotalHeight += listToPrint[i].SourceTransform.Height;
                }

                float expected_new_height = stripH;
                Assert.AreEqual(expected_new_height, TotalHeight);
            }
        }
예제 #7
0
        public void splitPageAspectConsistency()
        {
            WebtoonPage page = new WebtoonPage()
            {
                filpath = "",
                width   = 800,
                height  = 12480,
            };

            int[] dpps = new int[] { 96, 150, 300, 600 };
            foreach (int dpp in dpps)
            {
                List <PageFragmnet> listToPrint = new DuplexBuilder(
                    new Tools.LoggerHelper("test"),
                    Bindings.TemplatesTools.getA4(dpp, false),
                    3,
                    padPercent: 2.3f
                    ).splitPageLandscape(
                    page
                    );

                Assert.AreEqual(8, listToPrint.Count);
            }
        }
예제 #8
0
        private static List <PageFragmnet> SplitFile(
            DuplexOptions opt, string input_file, string file, string output_file, LoggerHelper log, DuplexBuilder d)
        {
            log.i(string.Format("Splitting strip: '" + file + "'"));
            var toon = new WebtoonPage()
            {
                filpath = input_file
            };

            using (MagickImage img = new MagickImage(file))
            {
                toon.height = img.Height;
                toon.width  = img.Width;
            }
            return(d.splitPageLandscape(toon));
        }