none
Как можно отобразить/перевернуть изображение? RRS feed

  • Общие обсуждения

  • Используя метод Image.RotateFlip() вы можете повернуть изображение на 90/180/270 градусов или отобразить его вертикально или горизонтально. Этот метод принимает параметр RotateFlip, являющийся значением перечисления System.Drawing.RotateFlipType и задающий величину поворота или ось зеркального отражения.

    Пример:

    // Повернуть изображения на 180 градусов, без отражения
    pictureBox1.Image.RotateFlip(RotateFlipType.Rotate180FlipNone);
    // Горизонтально отразить изображение
    pictureBox1.Image.RotateFlip(RotateFlipType.RotateNoneFlipX);
    // Повернуть на 90 градусов и горизонтально и вертикально отразить
     pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipXY);
    

    Если вы хотите перевернуть изображение на произвольный угол, то для этого нужно использовать матрицу трансформации System.Drawing.Drawing2D.Matrix

    Пример:

        public static Bitmap RotateImg(Bitmap bmp, float angle, Color bkColor)
        {
          int w = bmp.Width;
          int h = bmp.Height;
          PixelFormat pf = default(PixelFormat);
          if (bkColor == Color.Transparent)
          {
            pf = PixelFormat.Format32bppArgb;
          }
          else
          {
            pf = bmp.PixelFormat;
          }
    
          Bitmap tempImg = new Bitmap(w, h, pf);
          Graphics g = Graphics.FromImage(tempImg);
          g.Clear(bkColor);
          g.DrawImageUnscaled(bmp, 1, 1);
          g.Dispose();
    
          GraphicsPath path = new GraphicsPath();
          path.AddRectangle(new RectangleF(0f, 0f, w, h));
          Matrix mtrx = new Matrix();
          // Использование System.Drawing.Drawing2D.Matrix class 
          mtrx.Rotate(angle);
          RectangleF rct = path.GetBounds(mtrx);
          Bitmap newImg = new Bitmap(Convert.ToInt32(rct.Width), Convert.ToInt32(rct.Height), pf);
          g = Graphics.FromImage(newImg);
          g.Clear(bkColor);
          g.TranslateTransform(-rct.X, -rct.Y);
          g.RotateTransform(angle);
          g.InterpolationMode = InterpolationMode.HighQualityBilinear;
          g.DrawImageUnscaled(tempImg, 0, 0);
          g.Dispose();
          tempImg.Dispose();
          return newImg;
        }
        public Form1()
        {
          InitializeComponent();
          pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
          pictureBox1.Image = Image.FromFile(@"C:\image.jpg");
          pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
          Bitmap bitmap = (Bitmap)pictureBox1.Image;
          pictureBox1.Image = (Image)(RotateImg(bitmap, 30.0f, Color.Transparent));
        }
    
    

     


    Для связи [mail]
    1 февраля 2011 г. 15:56