Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 489
от 28.11.2007, 10:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 382, Экспертов: 35
В номере:Вопросов: 1, Ответов: 1


Вопрос № 110644: Здравствуйте Есть код (С++ Builder): LPBITMAPINFOHEADER lpbi; lpbi = (LPBITMAPINFOHEADER)Camera1->GetCurrentBitmap(); pdata=(char *)lpbi+lpbi->biSize+lpbi->biClrUsed * sizeof(RGBQUAD); ShowMessage(lpbi->...

Вопрос № 110.644
Здравствуйте

Есть код (С++ Builder):

LPBITMAPINFOHEADER lpbi;
lpbi = (LPBITMAPINFOHEADER)Camera1->GetCurrentBitmap();
pdata=(char *)lpbi+lpbi->biSize+lpbi->biClrUsed * sizeof(RGBQUAD);

ShowMessage(lpbi->biSize); // Выводит: 40
ShowMessage(lpbi->biWidth); // Выводит: 704
ShowMessage(lpbi->biHeight); // Выводит: 288
ShowMessage(lpbi->biPlanes); // Выводит: 1
ShowMessage(lpbi->biBitCount); // Выводит: 24
ShowMessage(lpbi->biCompression); // Выводит: 0
ShowMessage(lpbi->biSizeImage); // Выводит: 608256
ShowMessage(lpbi->biXPelsPerMeter); // Выводит: 0
ShowMessage(lpbi->biYPelsPerMeter); // Выводит: 0
ShowMessage(lpbi->biClrUsed); // Выводит: 0
ShowMessage(lpbi->biClrImportant); // Выводит: 0

Имея все эти данные как получить RGB данные о пикселе с координатами x = 10; y = 10?
Как я понял - указатель pdata - это указатель на массив байт изображения, но как с ним работать не понятно
Отправлен: 23.11.2007, 10:14
Вопрос задал: Кутубаев Нурлан Юсупович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ross
Здравствуйте, Кутубаев Нурлан Юсупович!

Очень просто: как с обычным одномерным массивом вида
RGBRGBRGBRGB....... (для 24 битного цвета) или
RGBARGBARGBA....... (для 32 битного цвета)
Однако есть один нюанс :) В bmp формате R и B каналы поменяны местами (непонятно только зачем...). Вобщем, чтобы получить данные о пикселе [10,10]:

LPBITMAPINFOHEADER lpbi;
lpbi = (LPBITMAPINFOHEADER)Camera1->GetCurrentBitmap();
pdata=(char *)lpbi+lpbi->biSize+lpbi->biClrUsed * sizeof(RGBQUAD);
unsigned char* pOffset = pdata[lpbi->biWidth*9 +9];
unsigned char R = pOffset[2],
G = pOffset[1],
B = pOffset[0];
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 23.11.2007, 18:53
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.64 от 24.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное