Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RGB, вытащить значения 
V
    Опции темы
Sosed
Дата 8.10.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток, такая проблема:
Есть изображение, из него надо вытащить в три массива RGB всех пикселей. С winapi я на "Вы", хотелось бы поподробней.
PM MAIL   Вверх
Cheloveck
Дата 8.10.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



GetPixel SetPixel, а вообще, хотелось бы поподробнее вопрос. Что за массивы, одинаковые что ли? Что должно быть в массивах?


--------------------
user posted image
PM Jabber   Вверх
Sosed
Дата 8.10.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну к примеру есть картинка 16х16, цветная. Если я правильно понял, то каждый пиксель закодирован тремя числами (111,222,201).
Собственно эти самые числа и надо вытащить в три массива, чтобы в итоге получилось три одинаковые матрицы.
Если можно, покажите пример, как получить эти значения для одного пикселя?

Это сообщение отредактировал(а) Sosed - 8.10.2009, 13:59
PM MAIL   Вверх
Cheloveck
Дата 8.10.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



RGB макрос для получения цвета. GetRValue, GetGValue и GetBValue для извлечения отдельных значений (тоже макросы).

Цитата(Sosed @  8.10.2009,  14:57 Найти цитируемый пост)
Если я правильно понял, то каждый пиксель закодирован тремя числами (111,222,201)

не совсем, цвет состоит из 24 бит, по 8 бит на каждый (красный, зелёный, синий), интенсивность определяется от нуля до 255. Старший байт четырёхбайтного значения RGB - значение прозрачности, оно тебе не надо.


--------------------
user posted image
PM Jabber   Вверх
bsa
Дата 8.10.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вообще-то, количество бит на пиксель может быть разным. Стандартные: 1, 4, 8, 15, 16, 24, 32 (с альфа-каналом или выравниванием). Все что меньше 15 бит, обычно, используют палитру (блок RGB цветов, на которые ссылается каждый пиксель). Поэтому, прежде чем начать разбивать картинку на цветовые каналы, нужно сначала узнать ее формат, а затем выбрать нужную процедуру вытаскивания цветов... Хотя, может в WinAPI уже все предусмотрено.
PM   Вверх
GremlinProg
Дата 8.10.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



так и есть, надо хотя бы знать в каком виде эта картинка,
Sosed, какие данные есть на входе, как говорится?
можно привести фрагмент кода для ясности


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sosed
Дата 9.10.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я как бы сам прошу фрагмент кода =)
Есть картинка, .bmp - с нее вытащить значения писелей. Говорят что в delphi можно просто функцией в цикле пробежаться по пикселям (GetPixel) и вытащить значения. В С++ незнаю как так сделать.
PM MAIL   Вверх
GremlinProg
Дата 9.10.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(Sosed @  9.10.2009,  11:12 Найти цитируемый пост)
Есть картинка, .bmp

это и есть исходные данные
Цитата(Sosed @  9.10.2009,  11:12 Найти цитируемый пост)
Говорят что в delphi можно просто функцией в цикле пробежаться по пикселям (GetPixel) и вытащить значения


в си то же самое:
Код

hBm = ::LoadImage( ..., _T("my.bmp"), ... );
::GetObject( hBm, sizeof(info), &info );
hScreenDC = ::GetDC( HWND_DESKTOP );
hdc = ::CreateCompatibleDC( hScreenDC );
hBm = ::SelectObject( hdc, hBm );
for( y= info.mbHeight; y-- ;){
  for( x= info.mbWidth; x-- ;){
    ::GetPixel( hdc, x, y );
  }
}
hBm = ::SelectObject( hdc, hBm );
::DeleteObject( hBm );
::DeleteDC( hdc );
::ReleaseDC( HWND_DESKTOP, hScreenDC );





--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sosed
Дата 9.10.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, вопрос решен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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