Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

перевод значений неуправляемого массива в управляемый - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не отображается значёк "Отладка" в Visual Studio 2010 http://www.cyberforum.ru/cpp-beginners/thread930974.html
Привет всем.До Visual'ки работал в code-blocks, сегодня решил запустить visual studio, написал код, а как начать компиляцию- не знаю.F5- "не катит".Вроде всё сохранил... Скрин прилагается. И да:...
C++ Вложенные циклы for (int i = 1; i < 10; ++i) { for (int j = 1; j <= i; ++j) cout << "*"; cout << "\n"; } Имеется такой вложенный цикл, при отладке смотрел за состоянием переменных, не могу понять... http://www.cyberforum.ru/cpp-beginners/thread930969.html
C++ Перегрузка операторов
Всем привет. Предположим, что нужно перегрузить оператор вывода << для какого-то класса, определенного мной. Этот оператор должен выводить приватные члены класса, поэтому его можно определить его как...
C++ Оптимизация программы
Нужно, чтобы программа случайным образом придумывала число от 1 до 32767 и печатала его цифры через 2 пробела. (Например, 4236 печатает 4 2 3 6). Программу написал, все работает, но не нравится...
C++ Вылет программы после завершения http://www.cyberforum.ru/cpp-beginners/thread930926.html
Добрый день. Сегодня решил начать изучение языка программирования. Нашел учебник для чайников, там построение задач ведется с использованием GNU C++. Данную программу я не нашел (возможно, плохо...
C++ Выбрать из одномерного массива А элементы, произведение которых на их номер превышает число 10 #include <conio.h> #include <iostream> using namespace std; void main() { const int N=10; //Размер обычного массива можно определить константой int x=10; int... подробнее

Показать сообщение отдельно
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
02.08.2013, 02:39
hamster28, это все та же история про черно-белое изображение из матрицы ?
Будем вспоминать ...
изображение черно-белое , значит красная, синяя, зеленая составляющая цвета пиксела равны
R = G = B
Создадим 24-битное изображение, прозрачность нам не нужна .
перевод значений неуправляемого массива в управляемый
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
array<Byte> ^  oneDimensArray = gcnew array<Byte> (arrayLenght);
   unsigned char** matrix   //  наша матрица 
....................................................
..................................................
 
  for (int j = 0; j < height; j++)
            {                  
                 for (int i = 0; i < width; i++)
                 {
                    oneDimensArray[counter]     = matrix[i][j];
                    oneDimensArray[counter + 1] = matrix[i][j];
                    oneDimensArray[counter + 2] = matrix[i][j];
                    counter += 3;
                }
            }
т.е. R G B равно значению матрицы ( R = G = B = matrix[i][j])
counter += 3; счетчик увеличиваем на 3 потому что у нас 3 байта на пиксел
(по 8 бит на красную, синюю и зеленую составляющую)

Поподробнее :
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
   int  width = //matrix width
              int  height = //matrix Height
              int counter = 0;
            unsigned char** matrix   //  наша матрица 
                
 
                //   
                // ЗАПОЛНЯЕМ МАТРИЦУ 
 
                // СОЗДАЕМ БИТМАП ПО РАЗМЕРУ МАТРИЦЫ 
               Bitmap^ bmp = gcnew Bitmap(width, height);
               Rectangle rect = Rectangle(0, 0, width, height);
               System::Drawing::Imaging::BitmapData^ bmpData = bmp->LockBits(rect, System::Drawing::Imaging::ImageLockMode::ReadWrite, PixelFormat::Format24bppRgb);
 
             //   Get the address of the first line.
               IntPtr ptr = bmpData->Scan0;
               int stride = Math::Abs(bmpData->Stride);
 
               //  УЗНАЕМ ДЛИНУ МАССИВА
               arrayLenght = stride * height; 
 
               // СОЗДАЕМ ОДНОМЕРНЫЙ МАССИВ 
               array<Byte> ^  oneDimensArray = gcnew array<Byte> (arrayLenght);
               
               // ЗАПОЛНЯЕМ МАССИВ ИЗ МАТРИЦЫ 
            for (int j = 0; j < height; j++)
            {                  
                 for (int i = 0; i < width; i++)
                 {
                    oneDimensArray[counter]     = matrix[i][j];
                    oneDimensArray[counter + 1] = matrix[i][j];
                    oneDimensArray[counter + 2] = matrix[i][j];
                    counter += 3;
                }
            }
            // Copy the RGB values back to the bitmap
            System::Runtime::InteropServices::Marshal::Copy(oneDimensArray, 0, ptr, arrayLenght);
 
            bmp->UnlockBits(bmpData);
                                 // удаляяем матрицу 
                for (int i = 0; i < width ; i++)
                     delete []matrix [i] ;
                delete [] matrix ;
 
            pictureBox1->Image = bmp;
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru