コード例 #1
0
ファイル: DuplexBuilder.cs プロジェクト: yonixw/webtoon2manga
        public List <PageFragmnet> splitPageLandscape(
            WebtoonPage toon)
        {
            List <PageFragmnet> result = new List <PageFragmnet>();

            int toonW = toon.width;
            int toonH = toon.height;

            int pageW = pageSize.Width;
            int pageH = pageSize.Height;

            //=================================

            int absolutePad    = (int)(pageSize.Width * padPercent * 0.01);
            int absoluteSpace  = (int)(pageSize.Width * spacePercent * 0.01);
            int printableWidth = pageSize.Width - absoluteSpace * (columnCount - 1) - 2 * absolutePad;
            int finalColW      = printableWidth / columnCount;
            int finalColH      = pageH - 2 * absolutePad;

            float toonFactor = finalColW * 1f / toonW; // Match Width
            int   finalToonH = (int)Math.Ceiling(toonH * toonFactor);

            float fragsBeforeRepeatSplit = finalToonH * 1f / finalColH;

            int finalFrags = (int)Math.Ceiling((finalToonH) * 1f / finalColH);
            //==================================


            int   lastY    = 0;
            SizeF fragSize = new SizeF(toonW, toonH / fragsBeforeRepeatSplit);

            for (int i = 0; i < finalFrags; i++)
            {
                PointF startPoint     = new PointF(0, lastY);
                SizeF  actualFragSize = fragSize;
                if (fragSize.Height > toonH - lastY)
                {
                    actualFragSize = new SizeF(fragSize.Width, toonH - lastY);
                }

                var frag = new PageFragmnet(startPoint, actualFragSize, toonFactor)
                {
                    pageSource = toon
                };
                result.Add(frag);

                lastY += (int)(toonH / fragsBeforeRepeatSplit);
            }

            return(result);
        }
コード例 #2
0
ファイル: DuplexBuilder.cs プロジェクト: yonixw/webtoon2manga
        public void addFragment(PageFragmnet frag, bool firstInCol)
        {
            if (isFull())
            {
                throw new Exception("Column already full!");
            }

            int myPrintableY   = myArea.Height - myYOffset;
            int fragPrintableY = Math.Min(myPrintableY, frag.TargetSize.Height - frag.TargetYOffset);

            int fragStartYSource = frag.SourceYOffset;
            int fragStartYTarget = frag.TargetYOffset;

            frag.addYOffset(fragPrintableY, false);

            int fragEndYSource = frag.SourceYOffset;

            OutputPartialPrintOrder printOrder = new OutputPartialPrintOrder(frag.pageSource.filpath);

            printOrder.PartialSource = new Rectangle(
                new Point(0, fragStartYSource + frag.SourceTransform.Y),
                new Size(frag.SourceTransform.Width, fragEndYSource - fragStartYSource)
                );

            printOrder.PartialTarget = new Rectangle(
                new Point(myOffset.X, myOffset.Y + myYOffset
                          + (firstInCol? 0: fragStartYTarget)),
                new Size(myArea.Width, (frag.TargetYOffset - fragStartYTarget))
                );
            mySources.Add(printOrder);

            //Console.WriteLine("Partial Source:" + printOrder.PartialSource.ToString());
            //Console.WriteLine("Partial Target:" + printOrder.PartialTarget.ToString());

            myYOffset += printOrder.PartialTarget.Height;
        }