Пример #1
0
        private static Bitmap[] GenerateBitmaps(List <ChunkBase> chunkList, int pageCount)
        {
            var bitmaps = new Bitmap[pageCount];

            if (chunkList.Count == 0)
            {
                return(bitmaps);
            }

            //var sizes = new SizeF[bitmaps.Length];
            var widths  = new float[bitmaps.Length];
            var heights = new float[bitmaps.Length];

            for (int i = 0; i < chunkList.Count; i++)
            {
                ChunkBase chunk = chunkList[i];
                int       index = chunk.PageIndex;
                if (index >= bitmaps.Length) // this happens when chunks overflows of max pages.
                {
                    continue;
                }

                float newWidth  = chunk.LeftTop.X + chunk.Size.Width;
                float newHeight = chunk.LeftTop.Y + chunk.Size.Height;
                if (widths[index] < newWidth)
                {
                    widths[index] = newWidth;
                }
                if (heights[index] < newHeight)
                {
                    heights[index] = newHeight;
                }
            }

            float maxWidth = 0.0f, maxHeight = 0.0f;

            for (int i = 0; i < bitmaps.Length; i++)
            {
                if (maxWidth < widths[i])
                {
                    maxWidth = widths[i];
                }
                if (maxHeight < heights[i])
                {
                    maxHeight = heights[i];
                }
            }

            int w = (int)Math.Ceiling(maxWidth);
            int h = (int)Math.Ceiling(maxHeight);

            for (int i = 0; i < bitmaps.Length; i++)
            {
                bitmaps[i] = new Bitmap(w, h);
            }

            return(bitmaps);
        }
Пример #2
0
        private static Bitmap[] GenerateBitmaps(List <ChunkBase> chunkList, PagesContext context)
        {
            List <Page> list    = context.PageList;
            var         bitmaps = new Bitmap[list.Count];

            if (chunkList.Count == 0)
            {
                return(bitmaps);
            }

            var sizes = new SizeF[list.Count];

            for (int i = 0; i < chunkList.Count; i++)
            {
                ChunkBase chunk = chunkList[i];
                if (chunk.PageIndex >= list.Count) // this happens when chunks overflows of max pages.
                {
                    break;
                }

                int index = chunk.PageIndex;
                sizes[index].Width += chunk.Size.Width;
                sizes[index].Height = Math.Max(sizes[index].Height, chunk.Size.Height);
            }

            float maxWidth = 0.0f, maxHeight = 0.0f;

            foreach (var size in sizes)
            {
                if (maxWidth < size.Width)
                {
                    maxWidth = size.Width;
                }
                if (maxHeight < size.Height)
                {
                    maxHeight = size.Height;
                }
            }

            for (int i = 0; i < bitmaps.Length; i++)
            {
                var bmp = new Bitmap((int)maxWidth, (int)maxHeight);
                bitmaps[i] = bmp;
            }

            return(bitmaps);
        }