Close

TFT displej a definování barev

Úvodní stránka Fórum Hardware Displeje TFT displej a definování barev

Označeno štítky: 

  • Toto téma obsahuje celkem 4 odpovědi. Do diskuze (4 diskutující) se naposledy zapojil uživatel Aleš a poslední změna proběhla před 8 roky a 5 měsíci.
Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (celkem z 5)
  • Autor
    Příspěvky
  • #6949
    Aleš
    Účastník

    Dobrý den,

    Mám TFT displej, u kterého jsou barvy definované takto:
    #define BLACK 0x0000
    #define BLUE 0x001F
    #define RED 0xF800
    #define GREEN 0x07E0
    #define CYAN 0x07FF
    #define MAGENTA 0xF81F
    #define YELLOW 0xFFE0
    #define WHITE 0xFFFF

    Chtěl jsem si vytvořit vlastní barvy, ale vůbec jsem nepochopil jak. RGB to není, CMYK také ne. Když se snažím měnit jednotlivá čísla, tak nemohu vůbec přijít na nějakou logiku mezi změnou čísla a změnou barvy 🙁
    Víte někdo jak na to??

    #6950
    ArduXPP
    Účastník

    http://www.rinkydinkelectronics.com/calc_rgb565.php

    stačí si u RGB dát číslo co potřebujete.Ale nedává to údaje co jsou barvy dole,Na stránce místo třeba 0x7800 mi vyjelo 0x8000 . Záleží asi na typu displeje , 8 nebo 16 čí 24 bit. Asi je to u každého jiné + záleží ještě na jiných parametrech výrobce.

    zde je tabulka:

    #define Black 0x0000 /* 0, 0, 0 */
    #define Navy 0x000F /* 0, 0, 128 */
    #define DarkGreen 0x03E0 /* 0, 128, 0 */
    #define DarkCyan 0x03EF /* 0, 128, 128 */
    #define Maroon 0x7800 /* 128, 0, 0 */
    #define Purple 0x780F /* 128, 0, 128 */
    #define Olive 0x7BE0 /* 128, 128, 0 */
    #define LightGrey 0xC618 /* 192, 192, 192 */
    #define DarkGrey 0x7BEF /* 128, 128, 128 */
    #define Blue 0x001F /* 0, 0, 255 */
    #define Green 0x07E0 /* 0, 255, 0 */
    #define Cyan 0x07FF /* 0, 255, 255 */
    #define Red 0xF800 /* 255, 0, 0 */
    #define Magenta 0xF81F /* 255, 0, 255 */
    #define Yellow 0xFFE0 /* 255, 255, 0 */
    #define White 0xFFFF /* 255, 255, 255 */
    #define Orange 0xFD20 /* 255, 165, 0 */
    #define GreenYellow 0xAFE5 /* 173, 255, 47 */
    #define Pink 0xF81F

    #6952
    posjirka
    Účastník
    #6959
    Zbyšek Voda
    Správce

    Dobrý den, TFT displeje často používají 16-bit barevný režim.
    Podívejte se sem – http://www.willamette.edu/~gorr/classes/GeneralGraphics/imageFormats/. Pod „16 bit color“ je tam tento režim popsaný.

    Zkráceně: Jak to funguje?
    Na popis barvy máte celkem 16 bitů. 5 na červenou, 6 na zelenou, 5 na modrou (lidské oko je na zelenou citlivější, proto má o jeden bit více). Bity jsou uspořádány takto:

    |r|r|r|r|r|g|g|g|g|g|g|b|b|b|b|b|

    Jak dosáhnout barev?
    Na červenou a modrou máte 5 bitů – tedy hodnoty 0 – 31
    Na zelenou 6 bitů – 0 – 63

    Kod:

    uint16_t barva(int r, int g, int b){
        r = r % 32;
        g = g % 64;
        b = b % 32;    
        
        r = r << 11;
        g = g << 5;
        
        return r | g | b;
    }

    Tedy uint16_t(0,0,0) vrátí hodnotu černé.

    #6965
    Aleš
    Účastník

    Dík. Ten generátor na http://www.rinkydinkelectronics.com/calc_rgb565.php je super. Dokonce vygenerované barvy odpovídají barvám na displeji. Že by to byl nějaký RGB565 kód by mě asi nenapadlo 🙁

Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (celkem z 5)
  • Pro reakci na toto téma se musíte přihlásit.