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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Не отображается значёк "Отладка" в Visual Studio 2010 http://www.cyberforum.ru/cpp-beginners/thread930974.html
Привет всем.До Visual'ки работал в code-blocks, сегодня решил запустить visual studio, написал код, а как начать компиляцию- не знаю.F5- "не катит".Вроде всё сохранил... Скрин прилагается. И да: можно ли как-то более-менее нормально настроить панель на Visual Studio (убрать лишнее, оставить нужное). p.s.Если есть инфа о всём этом- киньте ссылку, в поиске находил только старые темы.
C++ Вложенные циклы for (int i = 1; i < 10; ++i) { for (int j = 1; j <= i; ++j) cout << "*"; cout << "\n"; } Имеется такой вложенный цикл, при отладке смотрел за состоянием переменных, не могу понять почему переменная "j" не сохраняет старого значения а начинает крутить опять с единицы вновь, например при пятом заходе ее значение 5, после проверки условия становится 1, возможно я немного... http://www.cyberforum.ru/cpp-beginners/thread930969.html
C++ Перегрузка операторов
Всем привет. Предположим, что нужно перегрузить оператор вывода << для какого-то класса, определенного мной. Этот оператор должен выводить приватные члены класса, поэтому его можно определить его как friend. Однако, friend нарушает логику ООП (читал, что если вообще возможно обойтись без friend, то лучше обойтись), поэтому можно попробовать определить public функцию print, и затем ее вызывать из...
C++ Оптимизация программы
Нужно, чтобы программа случайным образом придумывала число от 1 до 32767 и печатала его цифры через 2 пробела. (Например, 4236 печатает 4 2 3 6). Программу написал, все работает, но не нравится код, слишком длинный мудреный. Можете подсказать как его упростить ? На данный момент прошел управляющие структуры, функции, ссылочные параметры, рекурсии. Прошу пользоваться только этим набором. ...
C++ Вылет программы после завершения http://www.cyberforum.ru/cpp-beginners/thread930926.html
Добрый день. Сегодня решил начать изучение языка программирования. Нашел учебник для чайников, там построение задач ведется с использованием GNU C++. Данную программу я не нашел (возможно, плохо искал. у меня 7-ая винда, если сможете помочь с этим, заранее спасибо). Скачал Dev C++. Говорят, одно и то же. Вообщем, вот первое, что предлагается в учебнике: #include <stdio.h> #include...
C++ Несколько *.cpp в одном проекте Добрый день! В приложении требуется несколько *.cpp как выполнить код каждой *.cpp ? подробнее

Показать сообщение отдельно
MrCold
851 / 749 / 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;
 
Текущее время: 20:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru