.NET 3.x поворот изображения - C#

Узнай цену своей работы

Формулировка задачи:

Вобщем нашёл рабочий код по повороту картинки на 90° влево клёва!)) Проблема в том, что я не могу понять как переделать функцию, чтоб она тоже самое делала, но вправо!) Вот сам код:
//Трансформация изображения (поворотом на 90 градусов).
        public static Bitmap MakeTurn(Bitmap bmp)
        {
            //Создаём пустую картинку - с шириной как высота исходной
            //и высотой как ширина исходной
            Bitmap bmp90 = new Bitmap(bmp.Height,bmp.Width);
            // Задаём формат Пикселя.
            PixelFormat pxf = PixelFormat.Format24bppRgb;
 
            //Для удобства ширину и высоту вынес в переменные.
            int X = bmp.Width;
            int Y = bmp.Height;
 
            // Получаем данные картинки.
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
            //Аналогично поступаем с пустой картинкой.
            Rectangle rect1 = new Rectangle(0, 0, bmp90.Width, bmp90.Height);
            //Блокируем набор данных изображения в памяти (для обеих картинок)
            BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, pxf);
            BitmapData bmpData1 = bmp90.LockBits(rect1, ImageLockMode.ReadWrite, pxf);
 
            // Получаем адрес первой линии (для обеих картинок).
            IntPtr ptr = bmpData.Scan0;
            IntPtr ptr1 = bmpData1.Scan0;
 
            // Задаём массив из Byte и помещаем в него набор данных.
            // int numBytes = bmp.Width * bmp.Height * 3; 
            //На 3 умножаем - поскольку RGB цвет кодируется 3-мя байтами
            //Либо используем вместо Width - Stride
            int numBytes = bmpData.Stride * bmp.Height;
            int widthBytes = bmpData.Stride;
            byte[] rgbValues = new byte[numBytes];
 
            //Аналогично для пустой (пока пустой) картинки.
            int numBytes1 = bmpData1.Stride * bmp90.Height;
            int widthBytes1 = bmpData1.Stride;
            byte[] rgbValues1 = new byte[numBytes1];
 
            // Копируем значения в массив (для обеих картинок).
            Marshal.Copy(ptr, rgbValues, 0, numBytes);
            Marshal.Copy(ptr1, rgbValues1, 0, numBytes1);
 
            // Перебираем исходное изображение по линиям и перестраиваем его в пустое
            for (int counter = 0; counter < Y; counter += 1)
            {
                for (int counter1 = 0; counter1 < X; counter1 += 1)
                {
                    //Абсолютная позиция точки в иходнике.
                    int position = ((counter) * X + counter1) * 3;
 
                    //Абсолютная позиция точки в приёмнике.
                    int position1 = ((X - counter1 - 1) * Y + counter) * 3;

                    //Копируем 3 байта цвета точки.
                    rgbValues1[position1] = rgbValues[position];
                    rgbValues1[position1 + 1] = rgbValues[position+1];
                    rgbValues1[position1 + 2] = rgbValues[position+2];
                }
            }
            // Копируем набор данных обратно в изображения
            Marshal.Copy(rgbValues, 0, ptr, numBytes);
            Marshal.Copy(rgbValues1, 0, ptr1, numBytes1);
 
            // Разблокируем набор данных изображений в памяти.
            bmp.UnlockBits(bmpData);
            bmp90.UnlockBits(bmpData1);
 
            //Возвращаем готовую картинку.
            return bmp90;
        }
Ткните лицом на то, что я проглядел!)) Как её заставить крутить вправо? Спасибо.

Решение задачи: «.NET 3.x поворот изображения»

textual
Листинг программы
private void button2_Click(object sender, EventArgs e)
        {
            pictureBox1.Image.RotateFlip(RotateFlipType.Rotate270FlipXY);
            pictureBox1.Refresh();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы