Exemplo n.º 1
0
        public Bitmap MakeThumbnail(int cxThumb, int cyThumb, bool fFilter)
        {
            Rectangle rcSrc = XBitmap.CalcRealBounds(m_bm);

            if (rcSrc.Width <= 0 || rcSrc.Height <= 0)
            {
                return(m_bm);
            }

            int      cxy   = Math.Max(rcSrc.Width, rcSrc.Height);
            Bitmap   bmDst = new Bitmap(cxy, cxy);
            Graphics gDst  = Graphics.FromImage(bmDst);

            gDst.Clear(Color.White);
            gDst.Dispose();
            int xDst = (bmDst.Width - rcSrc.Width) / 2;
            int yDst = (bmDst.Height - rcSrc.Height) / 2;

            BitmapData bmdDst = bmDst.LockBits(
                new Rectangle(0, 0, bmDst.Width, bmDst.Height),
                ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

            SuperBlt(rcSrc.X, rcSrc.Y, bmdDst, xDst, yDst,
                     rcSrc.Width, rcSrc.Height, false);

            bmDst.UnlockBits(bmdDst);

            Bitmap            bmLarge = new Bitmap(cxThumb, cyThumb);
            Graphics          g       = Graphics.FromImage(bmLarge);
            InterpolationMode imOld   = g.InterpolationMode;

            g.InterpolationMode = fFilter ? InterpolationMode.Bicubic : InterpolationMode.NearestNeighbor;
            PixelOffsetMode pomOld = g.PixelOffsetMode;

            g.PixelOffsetMode = PixelOffsetMode.Half;

            g.DrawImage(bmDst, 0, 0, cxThumb, cyThumb);

            g.PixelOffsetMode   = pomOld;
            g.InterpolationMode = imOld;

            g.Dispose();
            bmDst.Dispose();

            return(bmLarge);
        }