Sdílet prostřednictvím


rastrové obrázky Device-Independent

Rastrový obrázek nezávislý na zařízení (DIB) obsahuje barevnou tabulku. Barevná tabulka popisuje, jak hodnoty pixelů odpovídají RGB hodnoty barev, které popisují barvy vytvářené generováním světla. DiB tak může dosáhnout správného barevného schématu na libovolném zařízení. Sada DIB obsahuje následující informace o barvě a rozměrech:

  • Barevný formát zařízení, na kterém byl vytvořen obdélníkový obrázek.
  • Rozlišení zařízení, na kterém byl vytvořen obdélníkový obrázek.
  • Paleta pro zařízení, na kterém byla image vytvořena.
  • Pole bitů, které mapují červené, zelené, modré (RGB ) trojité na pixely v obdélníkovém obrázku.
  • Identifikátor komprese dat, který označuje schéma komprese dat (pokud existuje) sloužící ke zmenšení velikosti pole bitů.

Informace o barvě a rozměru jsou uloženy v BITMAPINFO struktury, která se skládá z BITMAPINFOHEADER struktury následované dvěma nebo více RGBQUAD struktury. BITMAPINFOHEADER struktura určuje rozměry obdélníku pixelů, popisuje barevnou technologii zařízení a identifikuje schémata komprese použitá ke zmenšení velikosti rastrového obrázku. RGBQUAD struktury identifikují barvy, které se zobrazí v obdélníku pixelů.

Existují dvě odrůdy DIB:

  • DiB směrem dolů, ve kterém je původ umístěn v levém dolním rohu.
  • DiB shora dolů, ve kterém je původ umístěn v levém horním rohu.

Pokud je výška dib označená Height člen struktury záhlaví rastrových informací, je to kladná hodnota, jedná se o diB směrem dolů nahoru; pokud je výška zápornou hodnotou, jedná se o DIB shora dolů. Databáze DIB shora dolů nelze komprimovat.

Formát barvy je určen z hlediska počtu barevných rovin a barevných bitů. Počet barevných rovin je vždy 1; Počet barevných bitů je 1 pro monochromatické rastrové obrázky, 4 pro rastrové obrázky VGA a 8, 16, 24 nebo 32 pro rastrové obrázky na jiných barevných zařízeních. Aplikace načte počet barevných bitů, které konkrétní zobrazení (nebo tiskárna) používá voláním funkce GetDeviceCaps, která jako druhý argument určuje BITSPIXEL.

Rozlišení zobrazovacího zařízení je zadané v pixelech na měřič. Aplikace může načíst vodorovné rozlišení pro zobrazení videa nebo tiskárnu pomocí tohoto třístupňového procesu.

  1. Volejte funkci GetDeviceCaps a jako druhý argument zadejte HORZRES.
  2. Volání GetDeviceCaps podruhé zadáním HORZSIZE jako druhého argumentu.
  3. Vydělte první vrácenou hodnotu druhou vrácenou hodnotou.

Aplikace může načíst vertikální rozlišení pomocí stejného třístupňového procesu s různými parametry: VERTRES místo HORZRES a VERTSIZE místo HORZSIZE.

Paleta je reprezentována polem RGBQUAD struktur, které určují červenou, zelenou a modrou intenzitu pro každou barvu v paletě barev zařízení zobrazení. Každý index barev v poli palety se mapuje na určitý pixel v obdélníkové oblasti přidružené k bitmapě. Velikost tohoto pole v bitech odpovídá šířce obdélníku v pixelech vynásobenou výškou obdélníku v pixelech v pixelech vynásobeným počtem barevných bitů zařízení. Aplikace může načíst velikost palety zařízení zavoláním funkce GetDeviceCaps a zadáním funkce NUMCOLORS jako druhého argumentu.

Systém Windows podporuje kompresi pole palety pro 8-bpp a 4-bpp dospoda. Tato pole je možné komprimovat pomocí schématu kódování RLE (run-length). Schéma RLE používá 2 bajtové hodnoty, první bajt určující počet po sobě jdoucích pixelů, které používají barevný index a druhý bajt určující index. Další informace o kompresi bitmap naleznete v popisu BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERa BITMAPV5HEADER struktury.

Aplikace může vytvořit DIB z DDB inicializací požadovaných struktur a voláním funkce GetDIBits. Pokud chcete zjistit, jestli zařízení tuto funkci podporuje, zavolejte funkci GetDeviceCaps a jako příznak RASTERCAPS zadejte RC_DI_BITMAP.

Aplikace, která potřebuje zkopírovat rastrový obrázek, může použít TransparentBlt ke zkopírování všech pixelů ve zdrojovém rastrovém obrázku do cílového rastrového obrázku s výjimkou pixelů, které odpovídají průhledné barvě.

Aplikace může pomocí DIB nastavit pixely na zobrazovacím zařízení voláním SetDIBitsToDevice nebo funkce StretchDIBits. Pokud chcete zjistit, jestli zařízení podporuje funkci SetDIBitsToDevice, zavolejte funkci GetDeviceCaps a jako příznak RASTERCAPS zadejte RC_DIBTODEV. Zadejte RC_STRETCHDIB jako příznak RASTERCAPS, který určuje, jestli zařízení podporuje StretchDIBits.

Aplikace, která jednoduše potřebuje zobrazit existující dib, může použít funkci SetDIBitsToDevice. Aplikace tabulky může například otevřít existující grafy a zobrazit je v okně pomocí funkce SetDIBitsToDevice. K opakovanému překreslení rastrového obrázku v okně by však aplikace měla použít funkci BitBlt. Například multimediální aplikace, která kombinuje animované grafiky se zvukem, by těžit z volání BitBlt funkce, protože se spouští rychleji než SetDIBitsToDevice.