Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
 Аватар для Evgen192
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 27

Вывод изображения в picturebox

03.05.2014, 00:11. Показов 6127. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем, программа Быстрого Преобразования Фурье (Берет изображение и выводит его спектр).
Я вроде со всем разобрался, осталось последнее: Вот я загружаю изображение в picturebox1 с помощью Button1 -> выполняю свой алгоритм -> и потом мне нужно обработанное изображение с помощью Button2 вывести в picturebox2 и вот в этом проблема.... посоветуйте как сделать.
Вот код:
P.S: Если найдете какие-то еще ошибки в моем коде, я не обижусь если вы их исправите, а буду очень благодарен=)

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AForge.Math;
 
namespace FFT
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                   System.IO.StreamReader(openFileDialog1.FileName);
            }
              pictureBox1.Image = (Bitmap)Bitmap.FromFile(openFileDialog1.FileName);
        }
 
        
            
            public enum Direction
            {
                Forward = 1,
               // Backward = -1
            };
 
            
            public void FFT(Complex[] data, Direction direction)
            {
                int n = data.Length;
                int m = Tools.Log2(n);
 
                // reorder data first
                ReorderData(data);
 
                // compute FFT
                int tn = 1, tm;
 
                for (int k = 1; k <= m; k++)
                {
                    Complex[] rotation = GetComplexRotation(k, direction);
 
                    tm = tn;
                    tn <<= 1;
 
                    for (int i = 0; i < tm; i++)
                    {
                        Complex t = rotation[i];
 
                        for (int even = i; even < n; even += tn)
                        {
                            int odd = even + tm;
                            Complex ce = data[even];
                            Complex co = data[odd];
 
                            double tr = co.Re * t.Re - co.Im * t.Im;
                            double ti = co.Re * t.Im + co.Im * t.Re;
 
                            data[even].Re += tr;
                            data[even].Im += ti;
 
                            data[odd].Re = ce.Re - tr;
                            data[odd].Im = ce.Im - ti;
                        }
                    }
                }
 
                if (direction == Direction.Forward)
                {
                    for (int i = 0; i < n; i++)
                    {
                        data[i].Re /= (double)n;
                        data[i].Im /= (double)n;
                    }
                }
            }
 
            
            private void FFT2(Complex[,] data, Direction direction)
            {
                Bitmap In = new Bitmap(pictureBox1.Image);
                Bitmap Out = new Bitmap(pictureBox1.Image);
 
                int k = In.Width;
                int n = In.Height;
 
                 k = data.GetLength(0);//row
                 n = data.GetLength(1);//column
                
 
                // check data size
                if (
                    (!Tools.IsPowerOf2(k)) ||
                    (!Tools.IsPowerOf2(n)) ||
                    (k < minLength) || (k > maxLength) ||
                    (n < minLength) || (n > maxLength)
                    )
                {
                    throw new ArgumentException("Incorrect data length.");
                }
 
                // process rows
                Complex[] row = new Complex[n];
 
                for (int i = 0; i < k; i++)
                {
                    // copy row
                    for (int j = 0; j < n; j++)
                        row[j] = data[i, j];
                    // transform it
                    FFT(row, direction);
                    // copy back
                    for (int j = 0; j < n; j++)
                        data[i, j] = row[j];
 
 
                    // process columns
                    Complex[] col = new Complex[k];
 
                    for (int j = 0; j < n; j++)
                    {
                        // copy column
                        for (int m = 0; m < k; m++)
                            col[m] = data[m, j];
                        // transform it
                        FFT(col, direction);
                        // copy back
                        for (int m = 0; m < k; m++)
                            data[m, j] = col[m];
 
                        Out.SetPixel(i, j, Color.Black);
                    }
                }
                
              pictureBox2.Image = Out;
 
 
            }
 
            #region Private Region
 
            private const int minLength = 2;
            private const int maxLength = 16384;
            private const int minBits = 1;
            private const int maxBits = 14;
            private static int[][] reversedBits = new int[maxBits][];
            private static Complex[,][] complexRotation = new Complex[maxBits, 2][];
 
            // Get array, indicating which data members should be swapped before FFT
            private static int[] GetReversedBits(int numberOfBits)
            {
                if ((numberOfBits < minBits) || (numberOfBits > maxBits))
                    throw new ArgumentOutOfRangeException();
 
                // check if the array is already calculated
                if (reversedBits[numberOfBits - 1] == null)
                {
                    int n = Tools.Pow2(numberOfBits);
                    int[] rBits = new int[n];
 
                    // calculate the array
                    for (int i = 0; i < n; i++)
                    {
                        int oldBits = i;
                        int newBits = 0;
 
                        for (int j = 0; j < numberOfBits; j++)
                        {
                            newBits = (newBits << 1) | (oldBits & 1);
                            oldBits = (oldBits >> 1);
                        }
                        rBits[i] = newBits;
                    }
                    reversedBits[numberOfBits - 1] = rBits;
                }
                return reversedBits[numberOfBits - 1];
            }
 
            // Get rotation of complex number
            private static Complex[] GetComplexRotation(int numberOfBits, Direction direction)
            {
                int directionIndex = (direction == Direction.Forward) ? 0 : 1;
 
                // check if the array is already calculated
                if (complexRotation[numberOfBits - 1, directionIndex] == null)
                {
                    int n = 1 << (numberOfBits - 1);
                    double uR = 1.0;
                    double uI = 0.0;
                    double angle = System.Math.PI / n * (int)direction;
                    double wR = System.Math.Cos(angle);
                    double wI = System.Math.Sin(angle);
                    double t;
                    Complex[] rotation = new Complex[n];
 
                    for (int i = 0; i < n; i++)
                    {
                        rotation[i] = new Complex(uR, uI);
                        t = uR * wI + uI * wR;
                        uR = uR * wR - uI * wI;
                        uI = t;
                    }
 
                    complexRotation[numberOfBits - 1, directionIndex] = rotation;
                }
                return complexRotation[numberOfBits - 1, directionIndex];
            }
 
            // Reorder data for FFT using
            private static void ReorderData(Complex[] data)
            {
                int len = data.Length;
 
                // check data length
                if ((len < minLength) || (len > maxLength) || (!Tools.IsPowerOf2(len)))
                    throw new ArgumentException("Incorrect data length.");
 
                int[] rBits = GetReversedBits(Tools.Log2(len));
 
                for (int i = 0; i < len; i++)
                {
                    int s = rBits[i];
 
                    if (s > i)
                    {
                        Complex t = data[i];
                        data[i] = data[s];
                        data[s] = t;
                    }
                }
            }
 
            #endregion
 
            private void button2_Click(object sender, EventArgs e)
            {
                
            }
 
            private void Form1_Load(object sender, EventArgs e)
            {
 
            }
 
            
 
        }
}
Пробывал так
C#
1
2
3
4
private void button2_Click(object sender, EventArgs e)
            {
                FFT2();
            }
но он выдает ошибку: Ни одна из перегрузок метода "FFT2" не принимает "0" аргументов

Подскажите пожалуйста.
Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2014, 00:11
Ответы с готовыми решениями:

Вывод изображения в PictureBox
Добрый день, прошу помощи. В коде существует массив MaxS, размером 256 на 256, который хранит в себе матрицу пикселей. Вопрос в том, как...

Склеивание изображения нескольких picturebox в один picturebox
Здравствуй, такой вопрос возник на счет picturebox. Можно ли из 3-ех к примеру picturebox(в каждом одинаковая картинка) Склеить все...

Как добиться качественного рисования изображения поверх изображения picturebox?
есть код: PictureBox p = (PictureBox)sender; p.SizeMode = PictureBoxSizeMode.Normal; ...

11
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
03.05.2014, 00:22
ну раз вы писали такой метод
C#
1
FFT2(Complex[,] data, Direction direction)
у вас метод принимает 2 аргумента, причем они обе обязательны.
и вызовите
C#
1
FFT2(Здесь data(тип Complex[,]), Здесь укажите direction(тип Direction))
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
03.05.2014, 00:24
Цитата Сообщение от Evgen192 Посмотреть сообщение
Ни одна из перегрузок метода "FFT2" не принимает "0" аргументов
Ну как раз это совсем не странно. У вас же этот метод с аргументами объявлен... Вот и ругается...
0
 Аватар для Evgen192
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 27
03.05.2014, 00:56  [ТС]
Сделал как вы сказали:
C#
1
2
3
4
private void button2_Click(object sender, EventArgs e)
            {
               FFT2 (data(Complex)  direction (Direction) );
            }
выпало куча ошибок:
1)Элемент "data" не существует в текущем контексте.
2)"AForge.Math.Complex" является "тип", но используется как "переменная"
3)Элемент "direction" не существует в текущем контексте.
4)"FFT.Form1.Direction" является "тип", но используется как "переменная"
5)В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта
6)Требуется ")"
7)Недопустимый элемент ")" в выражении
8)Требуется ";"
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
03.05.2014, 01:07
Цитата Сообщение от Evgen192 Посмотреть сообщение
Сделал как вы сказали:
Да нет уж, нужно писать аргументы. Вы же прописали аргументы в FFT(аргумент1, аргумент2)
Здесь так же нужно указать
0
 Аватар для Evgen192
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 27
03.05.2014, 15:31  [ТС]
Я вот как сделал:
C#
1
2
3
4
5
 
public void button2_Click(object sender, EventArgs e, Complex[,] data, Direction direction)
            {
               FFT2(data,direction);
            }
И он вначале не ругался а как начал запускать, выдал ошибку:
Нет перегруженного метода для "button2_Click", который соответствует делегату "System.EventHandler"
и вот на эту строку ссылается если на ошибку нажать:
this.button2.Click += new System.EventHandler(this.button2_Click);

Может что то я не так делаю, подскажите.

Добавлено через 3 часа 15 минут
sk007, Не подскажите как быть? а то мне это срочно надо бы, а тут такая беда..
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
03.05.2014, 17:44
Evgen192, Что это за программа то? Что она должна делать?

Добавлено через 24 минуты
может вот так
C#
1
2
3
4
5
public void button2_Click(object sender, EventArgs e)
{
       Complex[,] data; Direction direction;
       FFT2(data,direction);
}
0
 Аватар для Evgen192
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 27
03.05.2014, 18:27  [ТС]
sk007, Нет, так не хочет. Программа берет изображение и выдает его фурье образ(спектр). Весь алгоритм сделан, нужно вывести с помощью кнопки в picturebox обработанное изображение.
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
03.05.2014, 19:13
А в Complex e там какие данные?

Добавлено через 15 минут
т.е. в data

Добавлено через 25 минут
Еще один вопрос зачем читать изображение как текст, если все равно им не пользуешься?
C#
1
2
3
4
5
6
if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                   System.IO.StreamReader(openFileDialog1.FileName);
            }
              pictureBox1.Image = (Bitmap)Bitmap.FromFile(openFileDialog1.FileName);
хватило бы и
C#
1
2
3
4
if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = (Bitmap)Bitmap.FromFile(openFileDialog1.FileName);
            }
0
 Аватар для Evgen192
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 27
03.05.2014, 21:23  [ТС]
sk007, data с комплексными числами работает, так как в Преобразовании Фурье используется мнимая единица.
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
03.05.2014, 21:46
Evgen192,
Вот здесь вместо data попробуйте поставить этот массив с этими данными
C#
1
2
Direction direction = new Direction();
FFT2(data,direction);
И закоментируйте строку
C#
1
throw new ArgumentException("Incorrect data length.");
0
 Аватар для Evgen192
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 27
04.05.2014, 17:47  [ТС]
sk007, Если так писать то data он говорит что его не существует в текущем контексте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2014, 17:47
Помогаю со студенческими работами здесь

Открытие изображения в pictureBox C#
Доброго времени суток! В голову пришел такой вопрос можно ли по составленному пути не зная расширения изображения, но зная названия...

Загрузка изображения в picturebox
Добрый вечер, подскажите, создаю я форму значит добавляю туда кнопки(несколько) и picturebox; не получается сделать чтобы к примеру при...

Прокрутка изображения PictureBox
Добрый день. Помогите пожалуйста организовать прокрутку изображения загруженного в PictureBox.Image. Пытался делать на форме(на которой...

Не выводит изображения в pictureBox
Не знаю где закрался баг ... помогите.using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Печать изображения из picturebox
Как распечатать изображение из picturebox сохраняя пропорции по отношению к листу А4,т.е. чтобы при печати картинка с большим разрешением...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru