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);
Как достать цвет пикселя из Bitmap ?
BITMAP b;
Вопрос: как получить, имея только ее, цвет конкретного пикселя ?
Спасибо:-?
Цитата:
Originally posted by brat2
Имеется загруженный в память битмап и соответственно его структура
BITMAP b;
Вопрос: как получить, имея только ее, цвет конкретного пикселя ?
Спасибо:-?
Имеется загруженный в память битмап и соответственно его структура
BITMAP b;
Вопрос: как получить, имея только ее, цвет конкретного пикселя ?
Спасибо:-?
Думаю, знатоки раскритикуют моё решение, но можно сделать так.
- Создать HBITMAP из BITMAP с помощью CreateBitmapIndirect()
- Создать временный DC и выбрать в него HBITMAP
- Получить пиксели с помощью GetPixel()
- Всё поубивать
зачем мне тогда получать BITMAP ?
у меня с самого начала был
HBITMAP hBmp0 = (HBITMAP) ::LoadImage (NULL, "bmp0.bmp", IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
весь перец в том чтобы обойтись BITMAP, ведь там достаточно информации
Так что ?
Цитата:
Originally posted by brat2
это даже я догадался
зачем мне тогда получать BITMAP ?
у меня с самого начала был
HBITMAP hBmp0 = (HBITMAP) ::LoadImage (NULL, "bmp0.bmp", IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
весь перец в том чтобы обойтись BITMAP, ведь там достаточно информации
Так что ?
это даже я догадался
зачем мне тогда получать BITMAP ?
у меня с самого начала был
HBITMAP hBmp0 = (HBITMAP) ::LoadImage (NULL, "bmp0.bmp", IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
весь перец в том чтобы обойтись BITMAP, ведь там достаточно информации
Так что ?
В HBITMAP достаточно информации если только он создан при помощи CreateDIBSection - во всех остальных облом. Грузим в DC и пошло-поехало.
Формат BMP не такой уж и сложный (если не учитывать RLE сжатые - да и само сжатие не такое уж сложное).
Если тебя интересует работа с DIB секциями - можешь посмотреть здесь
А загрузка непакованного битмапа в DIB секцию - дело простейшее.
Как я туда файл с диска загружу ?
В структуре BITMAP по моему есть все и ширина и высота и кол-во бит на пиксель... только у меня ума не хватает вывести взаимосвязь... формулу по кот можно вывести значение цвета из массива бит для конкретного номера пикселя
Подскажи...
Цитата:
Originally posted by brat2
Объясни, зачем мне дибсекции ?
Как я туда файл с диска загружу ?
В структуре BITMAP по моему есть все и ширина и высота и кол-во бит на пиксель... только у меня ума не хватает вывести взаимосвязь... формулу по кот можно вывести значение цвета из массива бит для конкретного номера пикселя
Подскажи...
Объясни, зачем мне дибсекции ?
Как я туда файл с диска загружу ?
В структуре BITMAP по моему есть все и ширина и высота и кол-во бит на пиксель... только у меня ума не хватает вывести взаимосвязь... формулу по кот можно вывести значение цвета из массива бит для конкретного номера пикселя
Подскажи...
А чего уж тут проще-то?
Например так:
Сразу скажу - я тут не рассматриваю битмапы ниже 16 бит (формат 5-6-5). Там отдельная возня с палитрой и определением 5-5-5 это или 5-6-5.
Код: