2014.2.27合并图像

public byte[] TransPIc(string picpath) //将图片统一大小并转为byte

        {

            Image imgPhoto = Image.FromFile(picpath);

            int oldx = imgPhoto.Width;

            int oldy = imgPhoto.Height;

            //新图片尺寸

            int cx = 255;

            int cy = 255;

            if (oldx >= oldy)

                cy =Convert.ToInt32(255 * Convert.ToDouble(oldy) / Convert.ToDouble(oldx));

            if (oldx < oldy)

                cx = Convert.ToInt32(255 * Convert.ToDouble(oldx) / Convert.ToDouble(oldy));

            int dx = 255 - cx;

            int dy = 255 - cy;

           

            Image newImage = new Bitmap(255, 255);

            Graphics g = Graphics.FromImage(newImage);

            //清除画布,背景设置为白色

            g.Clear(System.Drawing.Color.White);

            // 设置画布的描绘质量         

            Image bm = new Bitmap(255,255); //先设置一空白图像

            if (dx > 0) //竖排图像

            {

                //在原图像两侧各插入dx/2宽,255高的空白图像

                //图像合并

                bm = new Bitmap(dx/2, 255);

                g.DrawImage(bm, 0, 0, dx/2, 255); //画布左侧添加空白

                g.DrawImage(imgPhoto, dx/2, 0, cx, cy); //从dx/2处添加原竖排图像,此时x方向右端仍有dx/2的空白

                g.DrawImage(bm, 255-dx/2, 0, dx/2, 0); //补上右侧的空白图像

            }

            if (dy > 0)

            {

                bm = new Bitmap(255, dy);

                g.DrawImage(bm, 0, 0, dx, dy);

                g.DrawImage(imgPhoto, dx, dy, cx, cy);

            }

           

            g.Dispose();

            imgPhoto.Dispose();

            MemoryStream ms = new MemoryStream();

            newImage.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);

            byte[] imagedata = ms.GetBuffer();

            newImage.Dispose();

            ms.Dispose();

            bm.Dispose();

            return imagedata;

        }

或者

  //新图片尺寸

                int cx = treatx;

                int cy = treaty;

                double r16_9 = 16.0 / 9.0;

                Image imgPhoto = Image.FromFile(picpath);

                int oldx = imgPhoto.Width;

                int oldy = imgPhoto.Height;

                int dltx = 0;

                int dlty = 0;

                if (oldx >= oldy) //正常横拍照片

                {

                    double oldxyrate = Convert.ToDouble(oldx) / Convert.ToDouble(oldy);

                    if (oldxyrate > r16_9) //原图偏宽

                    {

                        int justx = Convert.ToInt32(oldy * r16_9);

                        dltx = (oldx - justx) / 2; //原图两侧各应该剪裁多少

                    }

                    else if (r16_9 > oldxyrate) //原图偏高

                    {

                        int justy = Convert.ToInt32(oldx / r16_9);

                        dlty = (oldy - justy) / 2; //原图上下各应该剪裁多少

                    }

                }

                if (oldy > oldx) //竖拍照片 也按9:16的标准

                {

                    cx = treatxx;

                    cy = treaty;

                    double r9_16 = 9.0 / 16.0;

                    double oldxyrate = Convert.ToDouble(oldx) / Convert.ToDouble(oldy);

                    if (oldxyrate > r9_16) //原图偏宽

                    {

                        int justx = Convert.ToInt32(oldy * r9_16);

                        dltx = (oldx - justx) / 2; //原图两侧各应该剪裁多少

                    }

                    else if (r9_16 > oldxyrate) //原图偏高

                    {

                        int justy = Convert.ToInt32(oldx / r9_16);

                        dlty = (oldy - justy) / 2; //原图上下各应该剪裁多少

                    }

                }

                Image newImage = new Bitmap(cx, cy);

                Graphics g = Graphics.FromImage(newImage);

                g.DrawImage(imgPhoto, new Rectangle(0, 0, cx, cy), new Rectangle(dltx, dlty, imgPhoto.Width - 2 * dltx, imgPhoto.Height - 2 * dlty), GraphicsUnit.Pixel);

                g.Dispose();

                newImage.Dispose();

                imgPhoto.Dispose();

                return newImage;