🎉 YENİ: Artık Micropython ve CircuitPython (bytearray) desteği eklendi! Ayrıca resim Parlaklık, Kontrast ayarları ve tasarım iyileştirmeleri yapıldı.

image2cpp - Resimden C Dizisi Oluşturucu (Mono ve Renkli)

image2cpp (LCD Assistant), bir resmi C dizisine veya bayt dizisine çeviren, elinizdeki diziyi de tekrar resme döndüren ücretsiz bir araçtır. Arduino, ESP32 ve Raspberry Pi projelerinde kullanılan iki ekran tipini de kapsar: 1 bit tek renkli (SSD1306 / SH1106 OLED ve Nokia 5110) ve RGB565 veya RGB888 renkli (ST7735, ST7789, ILI9341, ILI9488 TFT paneller). Çıktı olarak Adafruit GFX, U8g2, düz bayt veya MicroPython / CircuitPython seçebilirsiniz.

1. Fotoğraf seç

Tüm işlemler tarayıcınızda yerel olarak yapılır; fotoğraflarınız çevrim içi olarak herhangi bir yere yüklenmez veya saklanmaz.

veya

1. Düz Bayt dizisi yapıştır


x px
Okunan fotoğraflar aşağıdaki 3. adımda görünür

2. Fotoğraf Ayarları

    Yalnızca fotoğraf dosya türüne izin verilir
    Dosya seçilmedi!
    100%
    100%
    0 - 255; Bir pikselin parlaklığı verilen seviyenin üzerindeyse piksel beyaz olur, aksi takdirde siyah olur. Alfa kullanıldığında bunun yerine opak ve şeffaf kullanılır.
    Fotoğrafı merkezlemek, yalnızca orijinal fotoğraftan daha büyük bir tuval kullandığınızda mümkündür.

    3. Ön izleme

    Seçili dosya yok

    4. Çıktı

    Micropython ve CircuitPython için bytearray formatında çıktı oluşturur.
    Bu oled_example örneğine kolay kopyalama yapıştırma için çıktının etrafına bazı ek Arduino kodu ekler. Birden fazla fotoğraf yüklenirse, her biri için bir bayt dizisi oluşturur ve tanımlayıcıya bir sayaç ekler.
    Kolay kopyalama yapıştırma için çıktının etrafına bazı ek Arduino kodu ekler. Birden çok fotoğraf yüklenirse, tek bir bayt dizisi oluşturur.
    GFXbitmapFont formatında bir çıktı oluşturur. Değiştirilmiş bir versiyonuyla kullanılan Adafruit GFX kütüphanesine aittir. GitHub projesi ve örnek kod bitmap-font
    Her fotoğraf için 1 karakter uzunluğunda bir glif tanımlayıcısı sağlanmazsa, ilk ASCII karakter değeri kullanılır. Değer, her glif için 1 artırılır.

    Aşağıdaki fotoğraf gibi fotoğrafınız ekranınızda bozuk görünüyorsa, farklı bir mod kullanın.

    info image
    U8g2 kütüphanesi ile çalışırken kullanışlıdır.

    Hangi çıktı biçimini seçmeliyim?

    Çizim modu, piksellerin baytlara nasıl paketleneceğini belirler. Zevke göre değil, ekran sürücüsüne göre seçin; yoksa resim dilimlenmiş veya aynalanmış çıkar.

    Çizim moduBayt / pikselTipik ekranlarÇizim çağrısı
    Mono, yatay1 bitSSD1306, SH1106, SSD1309 OLEDdrawBitmap() / drawXBM()
    Mono, dikey1 bitNokia 5110 (PCD8544), SSD1306 sayfa moduham tampon yazma
    Renkli RGB5652 baytST7735, ST7789, ILI9341, ILI9488, GC9A01drawRGBBitmap() / pushImage()
    Alfa maskesi1 bitrenkli bitmap yanında saydamlık maskesi olarakmaskeli blit
    Renkli RGB8883 bayt24 bit çerçeve tamponları, ESP32 RGB LCD panelleripanel sürücüsü
    Renkli HSV3 baytLED matrisler, çalışma anında ton kaydıran efektlerözel

    Diziyi kodunuzda kullanmak

    Tek renkli OLED, Adafruit SSD1306:

    #include <Adafruit_SSD1306.h>
    Adafruit_SSD1306 display(128, 64, &Wire, -1);
    
    // yukarıdaki Çıktı kutusundaki diziyi yapıştırın
    const unsigned char myBitmap [] PROGMEM = { /* ... */ };
    
    void setup() {
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
      display.clearDisplay();
      display.drawBitmap(0, 0, myBitmap, 128, 64, SSD1306_WHITE);
      display.display();
    }

    U8g2 ile tek renkli (XBM bayt sırası):

    u8g2.firstPage();
    do {
      u8g2.drawXBMP(0, 0, 128, 64, myBitmap);
    } while (u8g2.nextPage());

    ST7735 / ILI9341 üzerinde renkli RGB565, Adafruit GFX:

    #include <Adafruit_ILI9341.h>
    
    // RGB565 çıktısı piksel başına 2 bayt, bu yüzden unsigned char değil uint16_t
    const uint16_t myImage [] PROGMEM = { /* ... */ };
    
    tft.drawRGBBitmap(0, 0, myImage, 160, 128);

    TFT_eSPI ile renkli RGB565 (daha hızlı, ESP32 için ideal):

    #include <TFT_eSPI.h>
    TFT_eSPI tft = TFT_eSPI();
    
    tft.setSwapBytes(true);            // renkler ters görünüyorsa bu satırı kaldırın
    tft.pushImage(0, 0, 160, 128, myImage);

    Ne kadar bellek tutar?

    1 bit bitmap genişlik / 8 * yükseklik bayt tutar. RGB565 bitmap ise genişlik * yükseklik * 2. Aradaki fark hangi kartı kullanabileceğinizi belirler:

    • 128x64 tek renkli OLED: 1.024 bayt. Arduino Uno flash'ına düşünmeden sığar.
    • 160x128 RGB565 (ST7735): 40.960 bayt. Uno'nun 32 KB'lık tüm flash'ından zaten büyük. ESP32, RP2040 kullanın veya SD karttan akıtın.
    • 320x240 RGB565 (ILI9341): 153.600 bayt. Sadece ESP32 veya SD kart.

    Renkli resim sığmıyorsa Floyd-Steinberg dithering ile 1 bite çevirin. Küçük panelde dithering'li hâli, aşırı küçültülmüş renkli hâlinden genelde daha okunaklı görünür.

    Sık sorulan sorular

    image2cpp renkli resim destekliyor mu?

    Evet. Klasik 1 bit tek renkli modun yanında RGB565 (2 bayt/piksel), RGB888 (3 bayt/piksel) ve HSV dizi çıktısı verir. Renkli RGB565 - 2 bayt/piksel çizim modunu seçerseniz ST7735, ST7789, ILI9341 veya ILI9488 TFT ekrana doğrudan gönderebileceğiniz bir dizi elde edersiniz.

    RGB565 nedir, neden piksel başına 2 bayt?

    RGB565 bir rengi 16 bite sıkıştırır: 5 bit kırmızı, 6 bit yeşil, 5 bit mavi. Fazladan bit yeşile gider çünkü göz en çok yeşile duyarlıdır. Sonuç, 24 bit RGB888'in yarısı bellekte 65.536 renk. Arduino ve ESP32 üzerindeki neredeyse her küçük TFT sürücüsü bu yüzden RGB565 kullanır.

    Diziyi SSD1306 128x64 OLED'de nasıl gösteririm?

    Tuvali 128x64 yapın, yatay tek renkli çizim modunu ve Adafruit GFX çıktı biçimini seçin, sonra display.drawBitmap(0, 0, myBitmap, 128, 64, SSD1306_WHITE) ve ardından display.display() çağırın.

    Yatay mı, dikey mi?

    Adafruit GFX drawBitmap ve U8g2 drawXBM için yatay; bu çoğu SSD1306 ve SH1106 kodunu kapsar. Nokia 5110 (PCD8544) gibi sayfa adresli sürücüler ve ham SSD1306 sayfa tamponları için dikey. Resim yatay şeritlere bölünüyorsa yanlış olanı seçmişsinizdir.

    Bitmap neden bozuk veya kaymış görünüyor?

    Neredeyse her zaman genişlik uyuşmazlığı. Dizinin genişliği drawBitmap'e verdiğiniz genişlikle aynı olmalı ve 1 bit modlarda 8'in katı olmalı; aksi halde her satır doldurulur ve resim çapraz kayar. İkinci olarak bayt sırasını, RGB565'teyseniz ve şekil değil renkler ters görünüyorsa üçüncü olarak setSwapBytes() ayarını kontrol edin.

    Adafruit GFX mi U8g2 mi, fark ne?

    Adafruit GFX, drawBitmap ile çizilen bir PROGMEM bayt dizisi bekler ve 1 bitini açık piksel sayar. U8g2 ise drawXBM ile XBM sıralaması kullanır; orada her baytın içindeki bitler ters çevrilidir. Yanlışını seçmek her 8 pikseli aynalar.

    C dizisini tekrar resme çevirebilir miyim?

    Evet. Mevcut bir bayt dizisini Düz Bayt dizisi yapıştır kutusuna yapıştırın, doğru genişlik, yükseklik ve çizim modunu seçin; önizleme diziyi resme geri çevirir. Başkasının kodundan gelen bir bitmap'i kontrol etmek için kullanışlı.

    Hareketli GIF çevirebilir miyim?

    Burada hayır. Bu dönüştürücü tek bir durağan kare okur, çünkü dosyayı bir HTML canvas'a çiziyor ve canvas aynı anda tek kare tutuyor. Hareketli GIF verdiğinizde yalnızca birinci kareyi alırsınız. Animasyonlar için GIF'ten OLED animasyon dönüştürücüyü kullanın; o araç GIF formatını doğrudan ayrıştırıp her kareyi ayrı bir dizi olarak verir, üstüne kareler arasında dolaşan hazır kodu da üretir.

    Hangi resim boyutunu kullanmalıyım?

    Ekranınıza göre: yaygın SSD1306 OLED'ler için 128x64 veya 128x32, Nokia 5110 için 84x48, ST7735 için 160x128, yuvarlak GC9A01 için 240x240, ILI9341 için 320x240.

    İlgili araçlar