public void ScaleToFitBounds_Tall()
 {
     Size real = new Size(120, 200);
     Size limit = new Size(120, 100);
     Size result = new Size(60, 100);
     Assert.AreEqual(result, real.ScaleToFitBounds(limit));
 }
 public void ScaleToFitBounds_Wide()
 {
     Size real = new Size(240, 100);
     Size limit = new Size(120, 100);
     Size result = new Size(120, 50);
     Assert.AreEqual(result, real.ScaleToFitBounds(limit));
 }
        Bitmap RenderPageCore(int pageNum, Size maxSize, RenderQuality quality)
        {
            ArgCheck.InRange(pageNum, 0, PageCount, "pageNum");

            _pdfDoc.o.CurrentPage = pageNum;

            _pdfDoc.o.UseMuPDF = false;
            if (_pdfDoc.o.SupportsMuPDF && quality == RenderQuality.HighQuality) 
            { 
                _pdfDoc.o.UseMuPDF = true; 
            }

            // Scale
            Size pageSize = new Size(_pdfDoc.o.PageWidth, _pdfDoc.o.PageHeight);
            Size size = pageSize.ScaleToFitBounds(maxSize);

            // 24bpp format for compatibility with AForge
            Bitmap bitmap = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);

            using (Graphics g = Graphics.FromImage(bitmap))
            {
                _pdfDoc.o.Zoom = ZoomConst * (double)bitmap.Width / _pdfDoc.o.PageWidth;
                try
                {
                    // Note: not certain what the params mean.
                    // Simple RenderPage sometimes does not zoom properly
                    _pdfDoc.o.RenderPage(g.GetHdc(), true, false);
                    g.ReleaseHdc();
                }
                finally
                {
                    _pdfDoc.o.Zoom = ZoomConst;
                }

                Rectangle bounds = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
                g.FillRectangle(Brushes.White, bounds);

                _pdfDoc.o.ClientBounds = bounds;
                _pdfDoc.o.DrawPageHDC(g.GetHdc());
                g.ReleaseHdc();
            }

            return bitmap;
        }