Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как достать цвет пикселя из Bitmap ?

7.4K
12 апреля 2005 года
brat2
21 / / 15.03.2005
Имеется загруженный в память битмап и соответственно его структура

BITMAP b;

Вопрос: как получить, имея только ее, цвет конкретного пикселя ?

Спасибо:-?
425
12 апреля 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by brat2
Имеется загруженный в память битмап и соответственно его структура

BITMAP b;

Вопрос: как получить, имея только ее, цвет конкретного пикселя ?

Спасибо:-?


Думаю, знатоки раскритикуют моё решение, но можно сделать так.

  1. Создать HBITMAP из BITMAP с помощью CreateBitmapIndirect()
  2. Создать временный DC и выбрать в него HBITMAP
  3. Получить пиксели с помощью GetPixel()
  4. Всё поубивать
7.4K
12 апреля 2005 года
brat2
21 / / 15.03.2005
это даже я догадался

зачем мне тогда получать BITMAP ?

у меня с самого начала был
HBITMAP hBmp0 = (HBITMAP) ::LoadImage (NULL, "bmp0.bmp", IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

весь перец в том чтобы обойтись BITMAP, ведь там достаточно информации

Так что ?
487
12 апреля 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by brat2
это даже я догадался

зачем мне тогда получать BITMAP ?

у меня с самого начала был
HBITMAP hBmp0 = (HBITMAP) ::LoadImage (NULL, "bmp0.bmp", IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

весь перец в том чтобы обойтись BITMAP, ведь там достаточно информации

Так что ?



В HBITMAP достаточно информации если только он создан при помощи CreateDIBSection - во всех остальных облом. Грузим в DC и пошло-поехало.

Формат BMP не такой уж и сложный (если не учитывать RLE сжатые - да и само сжатие не такое уж сложное).

Если тебя интересует работа с DIB секциями - можешь посмотреть здесь

А загрузка непакованного битмапа в DIB секцию - дело простейшее.

7.4K
12 апреля 2005 года
brat2
21 / / 15.03.2005
Объясни, зачем мне дибсекции ?

Как я туда файл с диска загружу ?

В структуре BITMAP по моему есть все и ширина и высота и кол-во бит на пиксель... только у меня ума не хватает вывести взаимосвязь... формулу по кот можно вывести значение цвета из массива бит для конкретного номера пикселя

Подскажи...
487
12 апреля 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by brat2
Объясни, зачем мне дибсекции ?

Как я туда файл с диска загружу ?

В структуре BITMAP по моему есть все и ширина и высота и кол-во бит на пиксель... только у меня ума не хватает вывести взаимосвязь... формулу по кот можно вывести значение цвета из массива бит для конкретного номера пикселя

Подскажи...



А чего уж тут проще-то?

Например так:

Сразу скажу - я тут не рассматриваю битмапы ниже 16 бит (формат 5-6-5). Там отдельная возня с палитрой и определением 5-5-5 это или 5-6-5.

Код:
DWORD get_pixel_color(HBITMAP bmp,int x,int y)
{
   WORD _temp;
   char *pixel;
   BITMAP bmInfo;
   DWORD pixel_color;
   GetObject(bmp,sizeof(BITMAP),&bmInfo);
   pixel=(char*)bmInfo.bmBits;
   pixel+=bmInfo.bmWidthBytes*y;
   pixel+=x*bmInfo.bmBitsPixel;
   switch (bmInfo.bmBitsPixel)
   {
      case 16:_temp=*(WORD*)pixel;
              pixel_color=_temp&0x1F;
              _temp>>=5;
              pixel_color=(_temp&0x3F)<<8;
              _temp>>=6;
              pixel_color=(_temp&0x1F)<<0x10;
              break;
      case 24:pixel_color=*(DWORD*)pixel&0xFFFFFF;
              break;
      case 32:pixel_color=*(DWORD*)pixel;
              break;
   }
}

HBITMAP hBmp0 =(HBITMAP)::LoadImage (NULL, "bmp0.bmp", IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

DWORD color=get_pixel_color(hBmp0,5,5);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог