Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 10
1

Перевод части кода C++ Builder в C# - работа с изображением

15.04.2014, 19:45. Показов 1228. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста, как эти 3 строчки написанные в Builder записать в C#. Особенно не понятен Canvas.

// Непосредственно в следующей строке происходит считывание значения яркости
//canvas (холст) - стандартная функция Builder'а для работы с изображениями. Canvas — это поверхность формы или компонента image, на которой соответствующие методы могут вычерчивать графические примитивы.
//Pixels[x][y] - представляющее собой двумерный массив, элементы которого содержат информацию о цвете точек холста.

C#
1
2
3
       crColor=(COLORREF)ImageSource->Canvas->Pixels[x][y];
       R=GetRValue(crColor);       // Значения яркости текущего пикселя заносим в R,
       PixIn[x][y]=R;       // Заносим значения яркости текущего пикселя в массив PixIn по соответствующему адресу.
Добавлено через 3 минуты
Ну это записано в циклах
for (int x=0;x<=maxH-1;x++) // По столбцам от 0 до максимальной высоты
for (int y=0;y<=maxW-1;y++) // По строкам от 0 до максимальной ширины
{
...
}

В C# это:
C#
1
2
3
4
5
6
7
           for (int i = 0; i <= maxH - 1; i++) // По столбцам от 0 до максимальной высоты
               {
                   for (int j = 0; j <= maxW - 1; j++) // По строкам от 0 до максимальной ширины
                   {
                   ...  //Те самые 3 строчки
                   }
               }
А массив PixIn это:
C#
1
2
int PixIn[1024][1024]  или в C# int[,] PixIn = new int [1024, 1024];
// PixIn - в этот массив будут записаны значения яркости ВСЕЙ пикселей изображения
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2014, 19:45
Ответы с готовыми решениями:

Перевод кода с Delphi на C++ Builder (работа с файлами)
Вывести на Memo1 информацию с exam1.txt и записать эту информацию в names.txt. Помогите перевести...

Перевод кода из Delphi в C++ Builder / C++ Builder
Кто нибудь сможет помочь перевести проект с делфи на билдер? Выкладываю исходники на делфи. ...

Перевод кода в с++ builder
нужна помощь в переводе кода под билдер /* mla1d.f -- translated by f2c (version 20000817). ...

Перевод кода с С++ на С++ Builder
Прошу помочь перевести этот же код, он у меня программа должна находить в Memo1 слова состоящие из...

2
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,685
18.04.2014, 07:59 2
Аналог Canvas'а - класс Graphics, а чтобы читать пикселы нужен Bitmap. Вот пример (на форму добавлен элемент PictureBox):
C#
1
2
3
4
5
6
7
8
            var bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            pictureBox1.Image = bm;
 
            Graphics gr = Graphics.FromImage(pictureBox1.Image);
 
            bm.SetPixel(10, 10, Color.Black);
            Pen pn = new Pen(Color.Black, 2);
            gr.DrawEllipse(pn, 20, 20, 40, 40);
Для чтения пикселов используется GetPixel().

Добавлено через 7 минут
C#
1
Color cl = bm.GetPixel(10, 10);
0
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 10
18.04.2014, 11:40  [ТС] 3
Спасибо, попробую так.

Добавлено через 2 часа 48 минут
А вот ещё проблема:
это в Билдере:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//подготавливаются массивы для хранения входных и выходных матриц
  fftw_complex *in,*out; // 2 массива комплексных чисел
  // in-до преобразования, out - после (имена массивов значения не имеют)
 
  in = (fftw_complex*) fftw_malloc(N*N*sizeof(fftw_complex));  // на входе, до БПФ,
  out = (fftw_complex*) fftw_malloc(N*N*sizeof (fftw_complex)); // на выходе, после БПФ.
  // N*N - размер массива
  //Записываем "зн-я" пикселей во входную матрицу
  for (int x=0;x<=N-1;x++)      // По столбцам от 0 до N-1 = 63, т.к. нумерация в массивах начинается не с единицы, а с нуля
  for (int y=0;y<=N-1;y++)      // По строкам от 0 до N-1 = 63, 
  {
       //Рассматривается только действительная часть, мнимая часть равна 0
       // in[a][b] - a может принимать любое значение от 0, 
       //b - может принимать 2 значения: 0 для действительной части числа и 1 для мнимой.
       in[y+x*N][1]=0;
       in[y+x*N][0]=PixIn[x+x1][y+y1];
  }
в Шарпе:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fftw inmas, outmas;
             inmas = (...)fftw.malloc(N*N*sizeof(...));  // на входе, до БПФ,
            outmas = (...)fftw.malloc(N*N*sizeof (...));  // на выходе, после БПФ.
 
            for (int i = 0; i <= N - 1; i++)
            {
                for (int j = 0; j <= N - 1; j++)
                {
                    //Рассматривается только действительная часть, мнимая часть равна 0
                    // in[a][b] - a может принимать любое значение от 0, 
                    //b - может принимать 2 значения: 0 для действительной части числа и 1 для мнимой.
                    inmas[j + i*N, 1] = 0;
                    inmas[j + i*N, 0] = PixIn[i + i1, j + j1];
                }
            }
Здесь подключены библиотека fftw для преобразований Фурье, но она написана для C++, а на Шарп есть только обёртка, в ней немного другие названия типов. Что означают * (звёздочки) в C++, где указывается тип fftw_complex* в массиве in и out, и чем он отличается от fftw_complex?? В этой строке жалуется на неявное преобразование. В обёртке есть fftw_complexarray. А причём тут * ???
0
18.04.2014, 11:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2014, 11:40
Помогаю со студенческими работами здесь

Перевод кода с C# на C++ Builder
Здравствуйте уважаемые пользователи форума. Я долгое время пытаюсь найти подобный код для C++...

Перевод кода с Delphi на C++ Builder
Помогите перевести данный код (экспорт данных из ADOTable в Excel) с Delphi на C++ Builder. var ...

Перевод кода из Delphi в C++ Builder
Кто нибудь сможет помочь перевести проект с делфи на билдер? Выкладываю исходники на делфи.

Перевод кода из Delphi 7 в C++ Builder 6
Подскажите, пожалуйста, как можно перевести код: TMemo(FindComponent('Memo' +...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru