Bitmap 8, 16 bits, а также mono -> 24 color
никак. У меня были написаны две функции:
RGB BMP::GetPixel(int x,int y)
и
void BMP::PutPixel(int x,int y,RGB c);
void BMP::PutPixelP(int x,int y,int c); // палитровый
RGB={unsigned char r,g,b;}
соотв. GetPixel возращала правильно заполненную структуру.
RGB BMP::GetPixel(int x,int y)
и
void BMP::PutPixel(int x,int y,RGB c);
void BMP::PutPixelP(int x,int y,int c); // палитровый
RGB={unsigned char r,g,b;}
соотв. GetPixel возращала правильно заполненную структуру.
понятно.а как определить RGB16bits записан в формате 5,6,5 или 5,5,5 ?
>RGB16bits записан в формате 5,6,5 или 5,5,5
Заботай bmp-формат, если не лень. Смысл вообщем то такой: bmp фаил содержит <заголовок>+<палитра>+<точки по порядку: номер цвета из палитры >. 16бит указывает на величину палитры (65535 цветов)
Так что, говорить о 5,5,5 или 5,6,5 совсем неверно
Чтоб мне съесть свою голову, если это не так
Заботай bmp-формат, если не лень. Смысл вообщем то такой: bmp фаил содержит <заголовок>+<палитра>+<точки по порядку: номер цвета из палитры >. 16бит указывает на величину палитры (65535 цветов)
Так что, говорить о 5,5,5 или 5,6,5 совсем неверно

Чтоб мне съесть свою голову, если это не так

съешь
заголовок
biBitCount означает количество бит выделенных на цвет одного пикселя
16 = 5+5+5+1 = 5+6+5 (r+g+b)
так мне интересно, как из имаджхедера понять, что используется в данный момент?
заголовок
TRACE("FileHeader.bfType : %d\n",FileHeader.bfType);
TRACE("FileHeader.bfSize : %d\n",FileHeader.bfSize);
TRACE("FileHeader.bfReserved1 : %d\n",FileHeader.bfReserved1);
TRACE("FileHeader.bfReserved2 : %d\n",FileHeader.bfReserved2);
TRACE("FileHeader.bfOffBits : %d\n",FileHeader.bfOffBits); TRACE("IMAGE HEADER :\n");
TRACE("biSize : %d\n",m_Header.biSize);
TRACE("biWidth : %d\n",m_Header.biWidth);
TRACE("biHeight : %d\n",m_Header.biHeight);
TRACE("biPlanes : %d\n",m_Header.biPlanes);
TRACE("biBitCount : %d\n",m_Header.biBitCount);
TRACE("biCompression : %d\n",m_Header.biCompression);
TRACE("biSizeImage : %d\n",m_Header.biSizeImage);
TRACE("biXPelsPerMeter : %d\n",m_Header.biXPelsPerMeter);
TRACE("biYPelsPerMeter : %d\n",m_Header.biYPelsPerMeter);
TRACE("biClrUsed : %d\n",m_Header.biClrUsed);
TRACE("biClrImportant : %d\n",m_Header.biClrImportant); biBitCount означает количество бит выделенных на цвет одного пикселя
16 = 5+5+5+1 = 5+6+5 (r+g+b)
так мне интересно, как из имаджхедера понять, что используется в данный момент?
Обычно в bitCount написано, или 15 (для 5+5+5 или 16 (5+6+5)
зы
Готовую либу совсем не с руки взять?
зы
Готовую либу совсем не с руки взять?
нет, значения бывают только 0,1,4,8,16,24,32
для 16
The bitmap has a maximum of 2^16 colors. If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL. Each WORD in the bitmap array represents a single pixel. The relative intensities of red, green, and blue are represented with five bits for each color component. The value for blue is in the least significant five bits, followed by five bits each for green and red. The most significant bit is not used. The bmiColors color table is used for optimizing colors used on palette-based devices, and must contain the number of entries specified by the biClrUsed member of the BITMAPINFOHEADER.
If the biCompression member of the BITMAPINFOHEADER is BI_BITFIELDS, the bmiColors member contains three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. Each WORD in the bitmap array represents a single pixel.
Windows NT/Windows 2000/XP: When the biCompression member is BI_BITFIELDS, bits set in each DWORD mask must be contiguous and should not overlap the bits of another mask. All the bits in the pixel do not have to be used.
Windows 95/98/Me: When the biCompression member is BI_BITFIELDS, the system supports only the following 16bpp color masks: A 5-5-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x03E0, and the red mask is 0x7C00; and a 5-6-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x07E0, and the red mask is 0xF800.
для 16
The bitmap has a maximum of 2^16 colors. If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL. Each WORD in the bitmap array represents a single pixel. The relative intensities of red, green, and blue are represented with five bits for each color component. The value for blue is in the least significant five bits, followed by five bits each for green and red. The most significant bit is not used. The bmiColors color table is used for optimizing colors used on palette-based devices, and must contain the number of entries specified by the biClrUsed member of the BITMAPINFOHEADER.
If the biCompression member of the BITMAPINFOHEADER is BI_BITFIELDS, the bmiColors member contains three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. Each WORD in the bitmap array represents a single pixel.
Windows NT/Windows 2000/XP: When the biCompression member is BI_BITFIELDS, bits set in each DWORD mask must be contiguous and should not overlap the bits of another mask. All the bits in the pixel do not have to be used.
Windows 95/98/Me: When the biCompression member is BI_BITFIELDS, the system supports only the following 16bpp color masks: A 5-5-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x03E0, and the red mask is 0x7C00; and a 5-6-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x07E0, and the red mask is 0xF800.
555 - это 15bpp
Там есть такая штука в хедере, как CLRUSED и CLRIMPORTANT
можно их заботать
Там есть такая штука в хедере, как CLRUSED и CLRIMPORTANT
можно их заботать
хз
но google.com
выдает, например, такие исходники:
но google.com
выдает, например, такие исходники:
http://www.devolution.com/pipermail/sdl-cvs/2004-August/000625.html
switch(m_obh.biBitCount)
{
case 15:
param.output_format=DEC_RGB555_INV;
break;
case 16:
param.output_format=DEC_RGB565_INV;
break;
case 24:
param.output_format=DEC_RGB24_INV;
break;
case 32:
param.output_format=DEC_RGB32_INV;
break;
Мда, сорри, совсем все забыл 
Ну в жопу это программирование

Ну в жопу это программирование

google может всякую хуйню выводить, а msdn.Microsoft.com про 15 bits не слышал..
Дык, может это стандарт де-факто, а не де-юре.
что значит "де-юре"?
если на майкрософте написано, что может быть только 16, а про 15 ничего нет, это не мой стандарт...
если на майкрософте написано, что может быть только 16, а про 15 ничего нет, это не мой стандарт...
> что значит "де-юре"?
де-юре - это означает, что в стандарте написано, что бывает такое и такое
де-факто, это означает, что в мире крутится значительное кол-во картинок, которые оформлены именно по этим правилам.
де-юре - это означает, что в стандарте написано, что бывает такое и такое
де-факто, это означает, что в мире крутится значительное кол-во картинок, которые оформлены именно по этим правилам.
biCount будет равен 16.
Только после InfoHeader будет еще 16 байт для указания маски (к слову, 16бит это не обязательно 555 или 565, бывает и 444x) (соответственно, bitmapOffset будет уже на 16 больше)
Таким образом, получаем
BITMAPFILEHEADER
BITMAPINFOHEADER
и далее
16 байт
redMask 0xF8000000
greenBask 0x07E00000;
blueMask 0x001F0000;
alphaMask 0x00000000
Для других 16-битных пикселей маски соответсвенно будут свои.
Кстати, с bitCount == 15 многие популярные программы не откроют файл. Photoshop 7 и 8, умеющий поддерживать различные режимы для 16битного цвета, также пишет 16 в bitCount
Если интересуют стандарты, на bmp format их несколько - в 3 и 4 версии формата это фактически так уже прописано.
Только после InfoHeader будет еще 16 байт для указания маски (к слову, 16бит это не обязательно 555 или 565, бывает и 444x) (соответственно, bitmapOffset будет уже на 16 больше)
Таким образом, получаем
BITMAPFILEHEADER
BITMAPINFOHEADER
и далее
16 байт
redMask 0xF8000000
greenBask 0x07E00000;
blueMask 0x001F0000;
alphaMask 0x00000000
Для других 16-битных пикселей маски соответсвенно будут свои.
Кстати, с bitCount == 15 многие популярные программы не откроют файл. Photoshop 7 и 8, умеющий поддерживать различные режимы для 16битного цвета, также пишет 16 в bitCount
Если интересуют стандарты, на bmp format их несколько - в 3 и 4 версии формата это фактически так уже прописано.
Google часто дает ссылки на неточную инфу, и что?
Ты сам-то много с такими форматами работал?
Де-юре всегда будет bibitcount 16, см. новые стандарты.
А де-факто дофигищи картинок именно с bibitcount 16 и далее соответственно с масками для задания формата битов. (И будет еще больше, подобные форматы в мобильниках и кпк, коих с каждым днем больше и больше). И Photoshop, начиная с 7 версии, поддерживает не то, что ты процитировал, а именно 16 бит + маски (Photoshop 6 понимал только 565 режим).
Просто картинку, где 15 записано в biBitCount, ни одна из известных и популярных прог не откроет.
Ты сам-то много с такими форматами работал?
Де-юре всегда будет bibitcount 16, см. новые стандарты.
А де-факто дофигищи картинок именно с bibitcount 16 и далее соответственно с масками для задания формата битов. (И будет еще больше, подобные форматы в мобильниках и кпк, коих с каждым днем больше и больше). И Photoshop, начиная с 7 версии, поддерживает не то, что ты процитировал, а именно 16 бит + маски (Photoshop 6 понимал только 565 режим).
Просто картинку, где 15 записано в biBitCount, ни одна из известных и популярных прог не откроет.
> Только после InfoHeader будет еще 16 байт для указания маски
respect, не знал
respect, не знал
> Ты сам-то много с такими форматами работал?
Давно, и в детстве - сейчас стараюсь для стандартных задач использовать стандартные либы.
> Де-юре всегда будет bibitcount 16, см. новые стандарты.
где смотреть?
> Просто картинку, где 15 записано в biBitCount, ни одна из известных и популярных прог не откроет.
Viewer-ы обычно открывают.
Давно, и в детстве - сейчас стараюсь для стандартных задач использовать стандартные либы.
> Де-юре всегда будет bibitcount 16, см. новые стандарты.
где смотреть?
> Просто картинку, где 15 записано в biBitCount, ни одна из известных и популярных прог не откроет.
Viewer-ы обычно открывают.
Оставить комментарий
lord2476
Думаю эти алгоритмы, функции давно написаны, но никак не могу найтиМожет кто уже сталкивался? знает, подскажет...