Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> КАК получить числовое значение РГБ пикселей 
:(
    Опции темы
Gozaf
Дата 16.8.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот нужно сделать карту высот, вот  у меня есть картинка (карта высот) , мне надо получить числове значение РГБ каждого пикселя .... как это можно сделать в визуал студио нет С++ .... как сделать в билдере знаю хелп плз )
PM MAIL   Вверх
Nemesis
Дата 16.8.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А в чем именно сложность? 
- в загрузке картинки? 
- в непосредственном чтении байтов?
- в преобразовании байтов (к примеру 3х -r,g,b) в число?
--------------------
PM MAIL   Вверх
Gozaf
Дата 16.8.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну сложность как это сделать в визуал студии, вообщем какая функция закружает рисунок и  в какой тип данных чтобы можно было потом получить РГБ по координате пиксиля .. и еще конечно интересно как разложить РГБ на 3 числа вообщем может ктонить скинет сылку на такую тему или сам подскажет как сделать smile
PM MAIL   Вверх
Gozaf
Дата 16.8.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вообщем весь вопрос как это сдлеть в визуал студии ... как сделать в билдере я знаю

Добавлено @ 16:59 
точнее интересует как в визуале загрузить куданить картинку , в какуюнибуть переменную и как прочитать с него ргб каждого пикселя или как прочитать ТКолор пикселя короче вот так smile
PM MAIL   Вверх
Helene
Дата 16.8.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

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



Насколько я поняла, у тебя есть файл с картинкой. Соответственно, открываешь его любым способом (fopen, FileOpen etc). Далее в соответствии со стандартом формата читаешь заголовок файла и массив - саму картинку. По координатам рассчитываешь сдвиг в массиве.
Проще всего работать с bmp (он сносно описан в msdn). Если попадется что-нибудь другое и будет лень разбираться, можешь скачать бесплатную библиотеку FreeImage, там есть многое.

Думаю, как получить из RGB или RBG32 интересующие тебя значения, догадаешься сам smile

msdn в помощь ;)
PM ICQ   Вверх
chozen
Дата 25.8.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ндассс, молодой человек...  smile 

Если ты знаешь, как сделать это в билдере, то что тебе мешает сделать то же самое для ВС.

Я предпочитаю TGA. Формат чище, проще и т.д. Хотя от бмп отличается копейками.

Чтож смотри:

void *CreateMemTexFromTGA(char *fname)
{
        //open source tga file
        FILE *ifile = fopen(fname, "rb");
        if(ifile == NULL)
                return NULL;

        //read tga header
        TGAHeader tgah;
        fread(&tgah, sizeof(TGAHeader), 1, ifile);

        //only uncompressed images are supported
        if(tgah.ImageType != 2)
        {
                fclose(ifile);
                return NULL;           //compressed aren't supported
        }

        //no support for colormapped tgas
        if(tgah.ColorMapType != 0)
        {
                fclose(ifile);
                return NULL;           //colormapped aren't supported
        }

        //try to get image width, height, color depth and image size(total)
        int Width = tgah.Width[0] + tgah.Width[1] * 256;
        int Height = tgah.Height[0] + tgah.Height[1] * 256;
        int ColorDepth = tgah.BPP;

        if((int)(ColorDepth / 8) != 3)
                return NULL;
        int ImageSize = Width * Height * 3;

        //no support for tgas other than 24 bit colordepth
        if(ColorDepth != 24)
        {
                fclose(ifile);
                return NULL;           //colormapped aren't supported
        }

        void *image = malloc(ImageSize);
        if(image == NULL)
                return NULL;

        fread(image, 1, ImageSize, ifile);

        fclose(ifile);

/*
        Actually, we may need to flip the image vertically in order to
        protect from further erroneous addressing to its elements...

        But here we don't do in such a way...
*/

        return image;
}


Вот хэдер:
typedef struct _TGAHeader
{
        unsigned char FileType;
        unsigned char ColorMapType;
        unsigned char ImageType;
        unsigned char ColorMapSpec[5];
        unsigned char OrigX[2];
        unsigned char OrigY[2];
        unsigned char Width[2];
        unsigned char Height[2];
        unsigned char BPP;
        unsigned char ImageInfo;
} TGAHeader;

Далее, по смещению, находится тот триплет, который надо, а в нем - цветовые составляющие. Все это , конечно же одной строкой...
PM MAIL   Вверх
Rickert
Дата 25.8.2006, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Цитата

...и еще конечно интересно как разложить РГБ на 3 числа...

RGB - это цветовая модель. Данные в файл записываются по три байта R G B. Зачем ещё что-то куда-то раскладывать?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
chozen
Дата 28.8.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

...и еще конечно интересно как разложить РГБ на 3 числа...


Мож, он имеет в виду те случаи, когда ргб значение записано в DWORD?
Тогда воспользуйся виндовыми макросами GetRValue, GetGValue, GetBValue.

Хотя, в контексте данной темы, этот совет, скорее, для  общей эрудиции. smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

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


 




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


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

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