Obraz do tablicy C dla Arduino i ESP32

Aby przekonwertować obraz na tablicę C, zmień jego rozmiar na wymiary potrzebne na wyświetlaczu, wybierz format pikseli akceptowany przez twoją bibliotekę rysowania i wyeksportuj dane pikseli wraz z wywołaniem rysowania. W przypadku monochromatycznego OLED zazwyczaj oznacza to bitmapę 1-bitową. W przypadku kolorowego TFT częstym wyborem jest RGB565.
Rozszerzenie pliku tablicy mówi ci bardzo niewiele. Dwa nagłówki mogą zawierać liczby szesnastkowe, a mimo to wymagać zupełnie innych funkcji rysowania.
Wybierz bibliotekę rysowania przed konwersją
Zacznij od biblioteki już uruchomionej na twojej płytce. Konwersja PNG na tablicę C dla U8g2 nie powinna dawać tego samego wyniku co konwersja dla LVGL.
| Docelowy firmware | Zasób do przygotowania | Szczegół integracji |
|---|---|---|
| U8g2 | Bitmapa XBM | Szerokość i wysokość towarzyszą tablicy bajtów |
| TFT_eSPI | Piksele RGB565 lub bitmapa monochromatyczna | Użyj dopasowanej funkcji rysowania |
| Adafruit GFX | Piksele RGB565 lub bitmapa monochromatyczna | Dopasuj upakowanie bitmapy do API |
| LVGL 9 | Deskryptor obrazu i dane pikseli | Sama tablica pikseli nie jest kompletnym obiektem obrazu |
Dokumentacja platform w Lopaka zawiera listę formatów wyjściowych. Najpierw wybierz platformę, aby edytor wyeksportował odpowiedni zasób.
Konwertuj PNG lub BMP w Lopaka
- Otwórz Lopaka i wybierz docelową platformę oraz wymiary ekranu.
- Otwórz narzędzie Obraz i prześlij grafikę źródłową.
- Zmień rozmiar lub przytnij do rozmiaru, jaki obraz zajmie na urządzeniu. Ikona statusu o rozmiarze 24 pikseli nie potrzebuje bitmapy źródłowej na cały ekran.
- Wybierz tryb monochromatyczny lub RGB, gdy platforma oferuje oba. W przypadku grafiki liniowej sprawdź wynik przy wyłączonym ditheringu; w przypadku fotografii porównaj dostępne tryby ditheringu.
- Umieść zasób na ekranie, a następnie skopiuj wygenerowane dane i kod rysowania razem.
Przewodnik po imporcie obrazów opisuje te kontrolki. Jeśli potrzebujesz tylko konwersji na monochromatyczny OLED, skorzystaj z krótszego przewodnika po konwerterze obrazów U8g2.
Jak duża będzie tablica?
W przypadku nieskompresowanej bitmapy 1-bitowej upakowanej wierszami zaokrąglij każdy wiersz w górę do pełnego bajtu:
row bytes = (width + 7) / 8, using integer division
bitmap bytes = row bytes * height
RGB565 bytes = width * height * 2Obliczenia te opisują ładunki pikseli. Nie obejmują deskryptorów, wyrównania, palet ani dodatkowych buforów wykonawczych.
| Wymiary | 1-bitowa upakowana wierszami | RGB565 |
|---|---|---|
| 24 × 24 | 72 bytes | 1,152 bytes |
| 48 × 48 | 288 bytes | 4,608 bytes |
| 128 × 64 | 1,024 bytes | 16,384 bytes |
| 240 × 240 | 7,200 bytes | 115,200 bytes |
| 320 × 240 | 9,600 bytes | 153,600 bytes |
W przypadku monochromatycznej ikony 13 × 8 każdy wiersz zajmuje dwa bajty. Ładunek ma 16 bajtów, mimo że podzielenie łącznej liczby pikseli przez osiem daje 13. Ta różnica ma znaczenie przy diagnozowaniu przesuniętego obrazu.

Wzór testowy, 13 × 8: dwa zapisane bajty na wiersz, łącznie 16 bajtów. Pobierz pasujący plik XBM.
Rozmiar wygenerowanego pliku źródłowego jest jeszcze inny. Tekst taki jak 0xF8, 0x00 zajmuje więcej miejsca na dysku niż dwa bajty, które opisuje. Przy planowaniu pamięci flash sprawdzaj rozmiar skompilowanego firmware.
Jeśli wybierasz narzędzie do konwersji, porównanie alternatyw dla image2cpp wyjaśnia, gdzie kończy się samodzielny konwerter, a zaczyna przydawać się edytor ekranów.
Dlaczego przekonwertowana tablica może wyglądać źle
Jeśli kontur jest poprawny, ale kolory są złe, sprawdź format kolorów i kolejność bajtów. RGB565 przydziela pięć bitów na czerwień, sześć na zieleń i pięć na niebieski; Adafruit wyjaśnia to kodowanie w swojej dokumentacji grafiki.
Jeśli obraz monochromatyczny powtarza się lub przechyla na bok, sprawdź jego szerokość, dopełnienie wierszy i kolejność bitów. Wewnętrzny bufor ekranu kontrolera wyświetlacza niekoniecznie ma układ taki jak bitmapa akceptowana przez twoją funkcję rysowania.
Skorzystaj z pasującego przewodnika rozwiązywania problemów, jeśli przekonwertowane bajty wyglądają źle na TFT lub monochromatycznym OLED: napraw kolory RGB565 i kolejność bajtów w TFT_eSPI albo napraw bitmapy drawXBMP na SSD1306.
Przechowuj wynik konwertera i wygenerowane przez niego wywołanie rysowania jako parę. Skopiowanie samej tablicy do niepowiązanego przykładu usuwa informacje, które nadają bajtom znaczenie.
Pliki PNG i surowe piksele to różne rzeczy
Zmiana nazwy logo.png na logo.h nie dekoduje obrazu. PNG zawiera skompresowane dane obrazu i metadane. Funkcja rysowania, która oczekuje surowych pikseli RGB565, nie może bezpośrednio zinterpretować tego pliku.
W przypadku stałego logo konwersja przed kompilacją może uprościć ścieżkę firmware. W przypadku wymienialnych fotografii na nośniku danych lepszym wyborem może być dekoder. Wybieraj na podstawie tego, jak zasób będzie aktualizowany, a nie tylko tego, którą nazwę pliku najłatwiej wkleić do szkicu.
Częste pytania
Czy ta sama tablica C może działać na OLED i TFT?
Tylko wtedy, gdy obie ścieżki rysowania akceptują tę samą reprezentację. Ikona 1-bitowa może być przydatna na obu, ale tablica kolorów nie stanie się bitmapą monochromatyczną bez konwersji.
Czy konwersja PNG zachowuje przezroczystość?
Zależy to od formatu wyjściowego. Zwykły RGB565 nie zawiera kanału alfa. Sprawdź, czy eksport spłaszcza przezroczystość na tle, czy używa osobnego mechanizmu przezroczystości.
Od czego zacząć w przypadku pełnego ekranu?
Skorzystaj z przewodnika po kreatorze GUI dla Arduino, aby połączyć tekst, kształty i obrazy. Pozostawienie wartości temperatury jako tekstu pozwala firmware aktualizować ją bez zastępowania całej bitmapy ekranu.