![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Gozaf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 16.8.2006 Репутация: нет Всего: нет |
Вот нужно сделать карту высот, вот у меня есть картинка (карта высот) , мне надо получить числове значение РГБ каждого пикселя .... как это можно сделать в визуал студио нет С++ .... как сделать в билдере знаю хелп плз )
|
|||
|
||||
Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
А в чем именно сложность?
- в загрузке картинки? - в непосредственном чтении байтов? - в преобразовании байтов (к примеру 3х -r,g,b) в число? --------------------
|
|||
|
||||
Gozaf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 16.8.2006 Репутация: нет Всего: нет |
ну сложность как это сделать в визуал студии, вообщем какая функция закружает рисунок и в какой тип данных чтобы можно было потом получить РГБ по координате пиксиля .. и еще конечно интересно как разложить РГБ на 3 числа вообщем может ктонить скинет сылку на такую тему или сам подскажет как сделать
![]() |
|||
|
||||
Gozaf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 16.8.2006 Репутация: нет Всего: нет |
вообщем весь вопрос как это сдлеть в визуал студии ... как сделать в билдере я знаю
Добавлено @ 16:59 точнее интересует как в визуале загрузить куданить картинку , в какуюнибуть переменную и как прочитать с него ргб каждого пикселя или как прочитать ТКолор пикселя короче вот так ![]() |
|||
|
||||
Helene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 1.2.2006 Где: Киев Репутация: нет Всего: нет |
Насколько я поняла, у тебя есть файл с картинкой. Соответственно, открываешь его любым способом (fopen, FileOpen etc). Далее в соответствии со стандартом формата читаешь заголовок файла и массив - саму картинку. По координатам рассчитываешь сдвиг в массиве.
Проще всего работать с bmp (он сносно описан в msdn). Если попадется что-нибудь другое и будет лень разбираться, можешь скачать бесплатную библиотеку FreeImage, там есть многое. Думаю, как получить из RGB или RBG32 интересующие тебя значения, догадаешься сам ![]() msdn в помощь ;) |
|||
|
||||
chozen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 14.8.2006 Репутация: нет Всего: нет |
Ндассс, молодой человек...
![]() Если ты знаешь, как сделать это в билдере, то что тебе мешает сделать то же самое для ВС. Я предпочитаю 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; Далее, по смещению, находится тот триплет, который надо, а в нем - цветовые составляющие. Все это , конечно же одной строкой... |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
RGB - это цветовая модель. Данные в файл записываются по три байта R G B. Зачем ещё что-то куда-то раскладывать? -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
chozen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 14.8.2006 Репутация: нет Всего: нет |
Мож, он имеет в виду те случаи, когда ргб значение записано в DWORD? Тогда воспользуйся виндовыми макросами GetRValue, GetGValue, GetBValue. Хотя, в контексте данной темы, этот совет, скорее, для общей эрудиции. ![]() |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |