Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание дубликата массива 
:(
    Опции темы
Calvin
Дата 15.11.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Здравствуйте! Я начинающий программист. У меня есть указатель на массив. Мне нужно создать аналогичный массив, для работы с ним. Чтобы можно было его изменять. Вот мои наброски, ругается компилятор, не понимаю, что не так:
Код

int CloneMass(RGBQUAD* p,const int Width,const int Height)
{
    int mas[Width][Height];
    
    for( int y = 0; y < Height; y++ )
    {
        for( int x = 0; x < Width; x++ )
            mas[y][x]=p[x].rgbRed;
        p += Width;     // Advance to next scan-line
    }
    return *mas;
    
}
void CImgEnhDoc::OnTest()
{
    // This function demonstrates how to make changes to image itself

    // Backup current image contents so we can 'undo' changes
    
    Backup();

    // Get access to image attributes
    int nImageWidth = GetImageWidth(),      // Image width, always positive
        nImageHeight = GetImageHeight();    // Image height, always positive
    RGBQUAD* NewImage = GetImageBits();      // Pointer to image buffer, array of scan-lines, top to bottom

    int* DefaultImage=CloneMass(NewImage, nImageWidth, nImageHeight);
 SetModifiedFlag(TRUE);

    // Make changes visible
    UpdateAllViews(NULL);
}

Буду признателен за помощь!

Это сообщение отредактировал(а) Calvin - 15.11.2009, 12:56
PM MAIL   Вверх
BeKToP
Дата 15.11.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



Calvin,  тебе не кажется что если ты скажеш в каком месте и на что ругаеться компилятор, было бы проще тебе помоч?
так же хотелось бы знать какой у тебя компилятор 

PM MAIL WWW ICQ   Вверх
Calvin
Дата 15.11.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



BeKToP, спасибо за ответ. Извините за неточность. Пишу на Visual Studio 2005. Сам смысл программы таков:
 У меня есть указатель на массив пикселей картинки. 
1. Мне нужно создать аналогичный массив, чтобы с одного брать данные, а другой изменять. 
2. Один из массивов мне нужно разбить на квадраты и сделать эквализацию гистограммы каждого квадрата. Саму функцию эквализации я    написал. Осталось только разбить.
Я тут сам кое-что подправил, но до конца не доделал еще, высылаю заново код:
Код

void TakeMassPoints(int* Old, RGBQUAD* New, int x0,int y0,int x1,int y1,int Width,int Height) // в этой функции у меня обход всего изображения по квадратам                     
{
    if ( x0<Width-3 && y0<Height-3)
    {
         int contrast[256];
         for (int i=0; i<256; i++, contrast[i]=0);
         
         for( int y = y0; y < y1; y++ )
            for( int x = x0; x < x1; x++ )
                contrast[Old[y][x]]+=1; //Error 16 error C2109: subscript requires array or pointer type здесь ругается, может из-за того что это указатель?
         
        //Equalize(contrast);
    
         if (x1 == Width) 
         {
             x0=x1=0;
             if (y1 != Height)
             {
                y0++;y1++;
             }
         }
         else
         {
             x0++;x1++;
         }
         TakeMassPoints(Old, New, x0, y0, x1, y1, Width, Height);
    }
}
int* CloneMass(RGBQUAD* p,const int Width,const int Height) // делаю копию массива
{
           //int mas[Height][Width]; ругается с ошибкой Error    17    error C2057: expected constant expression
    int mas[100][100];
    
    for( int y = 0; y < Height; y++ )
    {
        for( int x = 0; x < Width; x++ )
            mas[y][x]=p[x].rgbRed;
        p += Width;     // Advance to next scan-line
    }
    return *mas;
    
}
void CImgEnhDoc::OnTest()
{
    // This function demonstrates how to make changes to image itself

    // Backup current image contents so we can 'undo' changes
    
    Backup();

    // Get access to image attributes
    int nImageWidth = GetImageWidth(),      // Image width, always positive
        nImageHeight = GetImageHeight();    // Image height, always positive
    RGBQUAD* NewImage = GetImageBits();      // Pointer to image buffer, array of scan-lines, top to bottom

    int* DefaultImage=CloneMass(NewImage, nImageWidth, nImageHeight);
    TakeMassPoints(DefaultImage, NewImage, 0, 0, nImageWidth/5, nImageHeight/5, nImageWidth, nImageHeight);
  // We have modified image contents, so mark this fact
    SetModifiedFlag(TRUE);

    // Make changes visible
    UpdateAllViews(NULL);
}



Это сообщение отредактировал(а) Calvin - 15.11.2009, 14:12
PM MAIL   Вверх
bsa
Дата 16.11.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Calvin, у тебя Old - это одномерный массив, а ты пытаешься с ним оперировать, как с двухмерным.
PM   Вверх
xvr
Дата 16.11.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата

Код

int* CloneMass(RGBQUAD* p,const int Width,const int Height) // делаю копию массива
{
           //int mas[Height][Width]; ругается с ошибкой Error    17    error C2057: expected constant expression


 Это можно делать в C99, но не в С++

Цитата

Код

   int mas[100][100];
    
    return *mas;


Возвращается указатель на ЛОКАЛЬНЫЙ массив (причем одномерный). После выхода из процедуры возвращенный массив будет разрушен

PM MAIL   Вверх
Calvin
Дата 15.12.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



xvrbsa,  спасибо! я уже сам все сделал)
PM MAIL   Вверх
bsa
Дата 16.12.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
Calvin, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.