Независими от устройството растерни изображения (DIB)

Независими от устройството растерни изображения (DIB)

Независимо от устройството растерно изображение (DIB)) съдържа цветна таблица . Таблицата с цветове описва как стойностите на пикселите съответстват на стойностите на цветовете RGB , които характеризират цветовете, създадени от излъчването на светлина. Съответно, растерният формат (DIB) може да постигне правилна цветова схема на всяко устройство. Формат на растерни изображения, независим от устройството (DIB) съдържа следните цветове и информация за размера:

  • Цветният формат на устройството, на което е създадено правоъгълното изображение.
  • Разделителна способност на устройството, на което е създадено правоъгълното изображение.
  • Палитрата на устройството, на което е създадено изображението.
  • Масив от битове, който показва червено, зелено, синьо (RGB) тризнаци пиксели в правоъгълно изображение.
  • Идентификатор за компресиране на данни, който обозначава схемата за компресиране на данни (ако има такава), използвана за намаляване на размера на битовия масив.

Информацията за цвета и размера се съхранява в структурата BITMAPINFO , който се състои от структура BITMAPINFOHEADER , придружени от две или повече структури RGBQUAD . Структура BITMAPINFOHEADER задава размерите на пикселния правоъгълник, описва технологията за цветопредаване на устройството и идентифицира схемите за компресия, използвани за намаляване на размера на растерното изображение. Структури RGBQUAD идентифицирайте цветовете, които се появяват в пикселния правоъгълник.

Има два типа формати DIB:

  • Възходящ формат на растерно изображение DIB, чийто произход е в долния ляв ъгъл.
  • Формат на низходящо растрово изображение DIB, произходът на който е в горния ляв ъгъл.

Ако височината на формата (DIB), както е посочено от растерната информация в термина Височина заглавната структура е положителна, тя е независим от устройства растерни формат (DIB); ако височината е отрицателна стойност, това е растерен формат, независим от устройството отгоре надолу (DIB). Формати надолу по веригата DIB не може да се свие.

Форматът на цветовете е посочен по отношение на общия брой цветни битове и цветни равнини. Броят на цветните равнини винаги е 1; брой цветни битове - 1 за монохромни (едноцветни) растерни изображения, 4 за растерни изображения VGA, и 8, 16, 24 или 32 за растерни изображения на други устройства за възпроизвеждане на цвят. Приложението извлича броя на битовите цветове за определен дисплей (или принтер) с помощта на извикване на функция GetDeviceCaps, в която вторият параметър е дефиниран като BITSPIXEL .

Разделителната способност на дисплейното устройство се измерва в пиксели на метър. Приложението може да извлече данните за хоризонтална разделителна способност за монитор или екран на принтера, като следва този тристепенен трик.

  1. Извикайте функцията GetDeviceCaps, определяйки втория параметър като HORZRES .
  2. Обадете се GetDeviceCaps за втори път, определяйки втория параметър като HORZSIZE .
  3. Разделете първата върната стойност на втората.

Приложението може да извлече данните за вертикална разделителна способност, като използва същия тристепенен трик с различни параметри: ВЕРТРИ вместо HORZRES, и ВЕРЦИЗ вместо HORZSIZE .

Палитрата е представена от масив от структури RGBQUAD, които определят червените, зелените и сините компоненти за яркост за всеки цвят в цветовата палитра на дисплея. Всеки индекс на цвят в масива на палитрата представлява определен пиксел в правоъгълната област, свързана с растерното изображение. Размерът на този масив, в битове, е еквивалентен на ширината на правоъгълника, в пиксели, умножена по височината на правоъгълника, в пиксели, умножена по броя на битовите цветове за устройството. Приложението може да извлича данни за размера на палитрата на устройството чрез обаждане GetDeviceCaps, определяйки втория параметър като БРОЙКИ .

Windows поддържа компресия на масив от палитри за 8-битови на пиксел (bpp) и 4-битови на пиксел (bpp) независими от устройства битмап формати (DIB). Тези масиви могат да бъдат компресирани с помощта на схемата за кодиране на дължината на изпълнението (RLE). Схема RLE използва 2-байтови стойности, където първият байт указва броя на последователните пиксели, които използват цветния индекс, а вторият байт задава индекса. За повече информация относно компресирането на растерно изображение вижте описанието на структурите BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADER и BITMAPV5HEADER .

Приложението може да създаде независим от устройството растерни формат (DIB) от зависим от устройството битов формат (DDB), инициализиране на необходимите структури и извикване на функцията GetDIBits . За да разберете дали устройството поддържа тази функция, извикайте функцията GetDeviceCaps, определящ RC_DI_BITMAP като квадратче за отметка RASTERCAPS .

Приложение, което трябва да копира растерно изображение, може да използва функцията TransparentBlt, да копирате всички пиксели в оригиналното растрово изображение в целевото растрово изображение, с изключение на онези пиксели, които съответстват на прозрачния цвят.

Приложението може да използва независим от устройството растер формат (DIB), за да зададете пикселите на дисплея чрез извикване на функцията SetDIBitsToDevice или StretchDIBits . За да разберете дали устройството поддържа функцията SetDIBitsToDevice, извикайте функцията GetDeviceCaps, определящ RC_DIBTODEV като квадратче за отметка RASTERCAPS . Инсталирай RC_STRETCHDIB като квадратче за отметка RASTERCAPS, за да разберете дали устройството поддържа StretchDIBits.

Приложение, което трябва просто да покаже съществуващо растрово изображение, независимо от устройството (DIB) може да използва функцията SetDIBitsToDevice. Например програма за електронни таблици може да отваря съществуващите диаграми и да ги показва на екран в прозорец с помощта на функцията SetDIBitsToDevice. За да преначертае растерното изображение в прозореца, приложението трябва да използва функцията BitBlt . Например мултимедийно приложение, което комбинира анимирани графики със звук, би се възползвало от извикване на функция BitBlt, защото изпълнява код по-бързо от SetDIBitsToDevice.