Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
7 / 7 / 2
Регистрация: 20.02.2010
Сообщений: 27
.NET 3.x

поворот изображения

17.04.2010, 23:03. Показов 3337. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вобщем нашёл рабочий код по повороту картинки на 90° влево клёва!))
Проблема в том, что я не могу понять как переделать функцию, чтоб она тоже самое делала, но вправо!)

Вот сам код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//Трансформация изображения (поворотом на 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;
        }
Ткните лицом на то, что я проглядел!)) Как её заставить крутить вправо?
Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2010, 23:03
Ответы с готовыми решениями:

Поворот экрана
Как программно на C# изменить ориентацию экрана, как это сделано в свойствах экрана Windows. Какую WinAPI функцию вызвать? И...

Поворот многоугольника
Доброго времени суток! У меня проблема возникла. Рисую на панели многоугольник, и имеется возможность его вращать вокруг центра! но...

Поворот на 90 градусов по часовой стрелке
Всем привет!!! Народ, очень нужна ваша помощь, срочно!!! Очень срочно!!! Ситуация такая: есть код формы, необходимо повернуть Разъеденитель...

2
18.04.2010, 02:34

Не по теме:

Крути влево 3 раза :D

0
7 / 7 / 2
Регистрация: 20.02.2010
Сообщений: 27
18.04.2010, 15:08  [ТС]
Вот вам налево:
C#
1
2
3
4
5
6
private void button1_Click(object sender, EventArgs e)
        {
 
            pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipXY);
            pictureBox1.Refresh();
        }
а вот вам направо:
C#
1
2
3
4
5
private void button2_Click(object sender, EventArgs e)
        {
            pictureBox1.Image.RotateFlip(RotateFlipType.Rotate270FlipXY);
            pictureBox1.Refresh();
        }
помогли прям.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2010, 15:08
Помогаю со студенческими работами здесь

.NET Compact Framework и поворот формы
Возникли некоторые трудности при разработке приложения под Windows Mobile 6. По плану, при повороте экрана на 90 градусов, форма должна...

Поворот bitmap(битмап) на определенный угол
Как собственно реализовать? Только нужно быстро не через SetPixel и GetPixel

поворот на определенный угол pictureBox1.Image
можно ли как то изображение в pictureBox1.Image повернть на 46 градусов ?

Поворот изображения
Здравствуйте! Совсем еще пока ничего не смыслю в WPF, знания поверхностные. Но вот на текущий момент не могу понять следующего: Как...

Поворот TabControl
В expression blend 4 создаю проект. Мне необходимо установить tabcontrol, так чтоб список вкладок был слева,и текст в них был...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru