RGB565 Renk Çevirici
HEX veya RGB rengini 16 bit RGB565'e çevirin, RGB565 değerini geri çözün. Ekranın gerçekte basacağı rengi yan yana görün ve Arduino kodunu doğrudan kopyalayın. ST7735, ST7789, ILI9341, ILI9488 ve GC9A01 için.
Birden fazla HEX rengi yapıştırın (satır satır veya virgülle), tek bir C dizisi olarak alın.
RGB565 Nedir?
RGB565, bir rengi 16 bite sıkıştıran bir renk formatıdır: 5 bit kırmızı, 6 bit yeşil, 5 bit mavi. Fazladan bit yeşile verilir, çünkü insan gözü en çok yeşil tonlardaki farkları ayırt eder. Sonuç 65.536 renktir ve 24 bit RGB888'in yarısı kadar bellek tutar. ST7735, ST7789, ILI9341, ILI9488 ve GC9A01 gibi küçük TFT sürücülerinin neredeyse tamamı bu formatı kullanır, çünkü bir mikrodenetleyicinin RAM'i tam renkli çerçeve tamponu kaldırmaz.
Bit yerleşimi
16 bitlik değerin üst 5 biti kırmızı, ortadaki 6 bit yeşil, alt 5 bit mavidir:
bit 15 14 13 12 11 | 10 9 8 7 6 5 | 4 3 2 1 0
R R R R R | G G G G G G | B B B B B
uint16_t c = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);Yaygın renkler
| Renk | HEX | RGB565 | Ondalık |
|---|---|---|---|
| Siyah | #000000 | 0x0000 | 0 |
| Beyaz | #FFFFFF | 0xFFFF | 65535 |
| Kırmızı | #FF0000 | 0xF800 | 63488 |
| Yeşil | #00FF00 | 0x07E0 | 2016 |
| Mavi | #0000FF | 0x001F | 31 |
| Sarı | #FFFF00 | 0xFFE0 | 65504 |
| Camgöbeği | #00FFFF | 0x07FF | 2047 |
| Macenta | #FF00FF | 0xF81F | 63519 |
RGB565 mi RGB888 mi?
Fark bellekte ortaya çıkar. 320x240 bir görüntü RGB888'de 230.400 bayt, RGB565'te 153.600 bayt tutar. Arduino Uno'nun toplam 32 KB flash'ı olduğu düşünülürse ikisi de sığmaz; ESP32'de ise RGB565 rahatça çalışır, RGB888 zorlar. Küçük panellerde gözle görülür bir kalite farkı da yoktur, bu yüzden pratikte neredeyse her zaman RGB565 tercih edilir.
Sıkça Sorulan Sorular
Rengim ekranda neden biraz farklı görünüyor?
RGB565 her kanalın alt bitlerini atar. Kırmızı ve mavide 8 basamağa, yeşilde 4 basamağa kadar sapma olur. Yukarıdaki iki kare tam olarak bunu gösterir: soldaki seçtiğiniz renk, sağdaki ekranın basacağı renk. Pastel tonlarda ve yumuşak gri geçişlerde fark en çok göze çarpar.
Renkler ters çıkıyor, ne yapmalıyım?
Bayt sırası sorunudur. TFT_eSPI kullanıyorsanız tft.setSwapBytes(true) satırını ekleyin veya kaldırın. Kırmızı ile mavinin yer değiştirmesi panelin BGR modunda olmasından da kaynaklanabilir; sürücü ayarını kontrol edin.
Kodda color565() mi yoksa sabit mi kullanmalıyım?
tft.color565(r, g, b) okunaklıdır ama her çağrıda hesaplar. Renk sabitse hesaplanmış 0x... değerini #define ile yazmak hem daha hızlı hem daha az yer kaplar. Bu araç ikisini de verir.
Resmin tamamını çevirmek istiyorum, ne kullanmalıyım?
Tek renk değil bir görüntü çevirecekseniz image2cpp aracını kullanın; RGB565 çıktı modunu seçtiğinizde doğrudan drawRGBBitmap() veya pushImage() ile kullanabileceğiniz bir dizi üretir.
Verilerim bir yere gönderiliyor mu?
Hayır. Tüm dönüştürme tarayıcınızda yapılır; hiçbir veri sunucuya gönderilmez veya saklanmaz.