public int[] getPicData(int pic_num, pagestructs sch, a4size a, out int cw, out int ch)
        {
            int[] possize = new int[4];
            int   picnum  = pic_num;
            int   col     = 0;
            int   row     = 0;

            cw = 0;
            ch = 0;

            int top  = a.margin;
            int left = a.margin;

            int wid = 0;
            int hei = 0;

            foreach (int i in sch.picsPerCol)
            {
                if (picnum - i >= 0)
                {
                    picnum -= i;
                    int h = i == 1 ? a.halfheight : (sch.picsPerCol.Contains(1) ? a.fourthheight : a.thirdheight);
                    top += h;
                    top += a.padding;
                }
                else
                {
                    col = picnum;

                    int l = 0;

                    wid = i == 1 ? a.fullwidth : (i == 2 ? a.halfwidth : (i == 3 ? a.thirdwidth : a.fourthwidth));
                    hei = i == 1 ? a.halfheight : (sch.picsPerCol.Contains(1) ? a.fourthheight : a.thirdheight);

                    cw = wid;
                    ch = hei;

                    switch (i)
                    {
                    case 1:
                        l = 0;
                        break;

                    case 2:
                        l = a.halfwidth;
                        break;

                    case 3:
                        l = a.thirdwidth;
                        break;

                    case 4:
                        l = a.fourthwidth;
                        break;
                    }

                    for (int ii = 0; ii < col; ii++)
                    {
                        left += l + a.padding;
                    }

                    picnum = i;
                    break;
                }

                row++;
            }

            possize[0] = left;              //LEFT
            possize[1] = top;               //TOP
            possize[2] = wid;               //WIDTH
            possize[3] = hei;               //HEIGHT

            return(possize);
        }
Exemple #2
0
        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (dpi d in Enum.GetValues(typeof(dpi)))
            {
                a4size a = new a4size();

                switch (d)
                {
                case dpi.d_72:
                    a._dpi    = dpi.d_72;
                    a.width   = 595;
                    a.height  = 842;
                    a.margin  = 15;
                    a.padding = 8;
                    break;

                case dpi.d_100:
                    a._dpi    = dpi.d_100;
                    a.width   = 827;
                    a.height  = 1169;
                    a.margin  = 20;
                    a.padding = 10;
                    break;

                case dpi.d_140:
                    a._dpi    = dpi.d_140;
                    a.width   = 1157;
                    a.height  = 1637;
                    a.margin  = 27;
                    a.padding = 14;
                    break;

                case dpi.d_200:
                    a._dpi    = dpi.d_200;
                    a.width   = 1654;
                    a.height  = 2339;
                    a.margin  = 41;
                    a.padding = 22;
                    break;

                case dpi.d_300:
                    a._dpi    = dpi.d_300;
                    a.width   = 2480;
                    a.height  = 3508;
                    a.margin  = 61;
                    a.padding = 32;
                    break;

                case dpi.d_400:
                    a._dpi    = dpi.d_400;
                    a.width   = 3307;
                    a.height  = 4677;
                    a.margin  = 81;
                    a.padding = 42;
                    break;

                case dpi.d_600:
                    a._dpi    = dpi.d_600;
                    a.width   = 4961;
                    a.height  = 7016;
                    a.margin  = 121;
                    a.padding = 63;
                    break;

                case dpi.d_1200:
                    a._dpi    = dpi.d_1200;
                    a.width   = 9921;
                    a.height  = 14031;
                    a.margin  = 241;
                    a.padding = 125;
                    break;

                case dpi.dd_30:
                    a._dpi    = dpi.dd_30;
                    a.width   = 248;
                    a.height  = 351;
                    a.margin  = 5;
                    a.padding = 3;
                    break;
                }

                a.fullheight   = a.height - (2 * a.margin);
                a.halfheight   = (a.height - ((2 * a.margin) + a.padding)) / 2;
                a.thirdheight  = (a.height - ((2 * a.margin) + (2 * a.padding))) / 3;
                a.fourthheight = (a.height - ((2 * a.margin) + (3 * a.padding))) / 4;
                a.fullwidth    = a.width - (2 * a.margin);
                a.halfwidth    = (a.width - ((2 * a.margin) + a.padding)) / 2;
                a.thirdwidth   = (a.width - ((2 * a.margin) + (2 * a.padding))) / 3;
                a.fourthwidth  = (a.width - ((2 * a.margin) + (3 * a.padding))) / 4;

                a4sizes.Add(a);

                cb_BlackBG.Checked = Properties.Settings.Default.s_BlackBG;
                cb_Borders.Checked = Properties.Settings.Default.s_Borders;
            }

            foreach (Schemes v in Enum.GetValues(typeof(Schemes)))
            {
                pagestructs ps = new pagestructs();

                switch (v)
                {
                case Schemes.s133:
                    ps.sch        = Schemes.s133;
                    ps.positions  = new int[] { 1, 3, 3, 3, 3, 3, 3 };
                    ps.pics       = 7;
                    ps.picsPerCol = new int[] { 1, 3, 3 };
                    break;

                case Schemes.s134:
                    ps.sch        = Schemes.s134;
                    ps.positions  = new int[] { 1, 3, 3, 3, 4, 4, 4, 4 };
                    ps.pics       = 8;
                    ps.picsPerCol = new int[] { 1, 3, 4 };
                    break;

                case Schemes.s212:
                    ps.sch        = Schemes.s212;
                    ps.positions  = new int[] { 2, 2, 1, 2, 2 };
                    ps.pics       = 5;
                    ps.picsPerCol = new int[] { 2, 1, 2 };
                    break;

                case Schemes.s232:
                    ps.sch        = Schemes.s232;
                    ps.positions  = new int[] { 2, 2, 3, 3, 3, 2, 2 };
                    ps.pics       = 7;
                    ps.picsPerCol = new int[] { 2, 3, 2 };
                    break;

                case Schemes.s313:
                    ps.sch        = Schemes.s313;
                    ps.positions  = new int[] { 3, 3, 3, 1, 3, 3, 3 };
                    ps.pics       = 7;
                    ps.picsPerCol = new int[] { 3, 1, 3 };
                    break;

                case Schemes.s323:
                    ps.sch        = Schemes.s323;
                    ps.positions  = new int[] { 3, 3, 3, 2, 2, 3, 3, 3 };
                    ps.pics       = 8;
                    ps.picsPerCol = new int[] { 3, 2, 3 };
                    break;

                case Schemes.s333:
                    ps.sch        = Schemes.s333;
                    ps.positions  = new int[] { 3, 3, 3, 3, 3, 3, 3, 3, 3 };
                    ps.pics       = 9;
                    ps.picsPerCol = new int[] { 3, 3, 3 };
                    break;

                case Schemes.s434:
                    ps.sch        = Schemes.s434;
                    ps.positions  = new int[] { 4, 4, 4, 4, 3, 3, 3, 4, 4, 4, 4 };
                    ps.pics       = 11;
                    ps.picsPerCol = new int[] { 4, 3, 4 };
                    break;
                }

                psl.Add(ps);
            }

            cb_Scheme.SelectedIndex = Properties.Settings.Default.s_Layout;
            cb_DPI.SelectedIndex    = Properties.Settings.Default.s_DPI;
            switch (Properties.Settings.Default.s_Output)
            {
            case 0:
                rb_PDF.Checked = true;
                break;

            case 1:
                rb_IMG.Checked = true;
                break;

            case 2:
                rb_HTML.Checked = true;
                break;

            default: rb_PDF.Checked = true; break;
            }
        }
        public List <Bitmap> createPositions(pagestructs p, List <string> pics, a4size a)
        {
            List <Bitmap> bmps = new List <Bitmap>();

            int numofPics = pics.Count;

            int picspp = p.pics;

            int numOfPages = (numofPics / picspp) + (numofPics % picspp == 0 ? 0 : 1);

            int i = 0;

            Bitmap b = new Bitmap(a.width, a.height);

            using (Graphics g = Graphics.FromImage(b))
            {
                g.Clear(Properties.Settings.Default.s_BlackBG ? Color.Black : Color.White);
            }

            foreach (String s in pics)
            {
                using (Graphics g = Graphics.FromImage(b))
                {
                    int   cw = 0;
                    int   ch = 0;
                    int[] r  = getPicData(i, p, a, out cw, out ch);
                    int[] r2 = new int[4];
                    for (int ii = 0; ii < 4; ii++)
                    {
                        r2[ii] = r[ii];
                    }
                    Bitmap bmp  = new Bitmap(s);
                    Size   res  = getSize(bmp.Width, bmp.Height, r[3], r[2]);
                    Size   res2 = new Size();


                    if (res.Width > cw)
                    {
                        res2 = new Size(r[2], res.Height); r[1] = r[1] + (r[3] / 2) - (res2.Height / 2);
                    }
                    else
                    {
                        res2 = new Size(res.Width, r[3]); r[0] += (r[2] - res2.Width) / 2;
                    }

                    g.DrawImage(bmp, new Rectangle(r[0], r[1], res2.Width, res2.Height));
                    if (Properties.Settings.Default.s_Borders)
                    {
                        if (Properties.Settings.Default.s_BlackBG)
                        {
                            g.DrawRectangle(Pens.White, new Rectangle(r2[0], r2[1], r2[2], r2[3]));
                        }
                        else
                        {
                            g.DrawRectangle(Pens.Black, new Rectangle(r2[0], r2[1], r2[2], r2[3]));
                        }
                    }
                }

                if (i == picspp - 1)
                {
                    bmps.Add(b);

                    if (a._dpi == dpi.dd_30)
                    {
                        break;
                    }

                    i = -1;
                    b = new Bitmap(a.width, a.height);
                    using (Graphics g = Graphics.FromImage(b))
                    {
                        g.Clear(Properties.Settings.Default.s_BlackBG ? Color.Black : Color.White);
                    }
                }
                else if (s == pics.Last())
                {
                    bmps.Add(b);
                }

                i++;
            }

            return(bmps);
        }