Graphic-library OHNE Arduino mit Texten und Farbkorrektur

#6977354
Lesenswert?

Hallo!

Ich suche eine Grafik Bibliothek ähnlich der Adafruit GFX, welche aber 
im Idealfall auf Plain-C aufsetzt und keine weiteren (Arduino) Libraries 
benötigt.

Oder andersrum: Ich habe auf einer recht unüblichen MCU Plattform eine 
bereits per DMA und SPI sehr effiziente Ansteuerung von APA102 LEDs mit 
einem einwandfrei nutzbaren Framebuffer.

Interface wäre also quasi "SetPixel(x, y, r, g, b, [brightness])". Jetzt 
suche ich "upper-layer" Funktionen für Kreise, Linien, ggf. 
Farbkorrekturtabellen und am liebsten die Adafruit GFX Fonts.

Danke!

Grüße
Robert
Gast #6977421
Lesenswert?

Die AdafruitGFX ist nicht sehr Arduino spezifisch und kann auch für 
andere Plattformen umgebaut werden. Und C++ unterstützt gerade die 
Implementierung für verschiedenste Grafik Controller, inklusive LED 
Matrizen.

Lukas W. schrieb:
> Probiere es mal mit LVGL

da liegt der Fokus aber auf dem GUI level, einfache Zeichenfunktionen 
sind da eher aufwändig weil die wieder extra Speicher für den 
Zeichenbereich brauchen.
#6980086
Lesenswert?

Robert B. schrieb:
> Funktionen für Kreise, Linien, ggf.

Bresenham (Linie) aus Wikipedia:
1
void line(int x0, int y0, int x1, int y1)
2
{
3
  int dx =  abs(x1-x0), sx = x0<x1 ? 1 : -1;
4
  int dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1;
5
  int err = dx+dy, e2; /* error value e_xy */
6

7
  while (1) {
8
    setPixel(x0,y0);
9
    if (x0==x1 && y0==y1) break;
10
    e2 = 2*err;
11
    if (e2 > dy) { err += dy; x0 += sx; } /* e_xy+e_x > 0 */
12
    if (e2 < dx) { err += dx; y0 += sy; } /* e_xy+e_y < 0 */
13
  }
14
}

Bresenham (Ellipse) aus Wikipedia:
1
void ellipse(int xm, int ym, int a, int b)
2
{
3
   int dx = 0, dy = b; /* im I. Quadranten von links oben nach rechts unten */
4
   long a2 = a*a, b2 = b*b;
5
   long err = b2-(2*b-1)*a2, e2; /* Fehler im 1. Schritt */
6

7
   do {
8
       setPixel(xm+dx, ym+dy); /* I. Quadrant */
9
       setPixel(xm-dx, ym+dy); /* II. Quadrant */
10
       setPixel(xm-dx, ym-dy); /* III. Quadrant */
11
       setPixel(xm+dx, ym-dy); /* IV. Quadrant */
12

13
       e2 = 2*err;
14
       if (e2 <  (2*dx+1)*b2) { dx++; err += (2*dx+1)*b2; }
15
       if (e2 > -(2*dy-1)*a2) { dy--; err -= (2*dy-1)*a2; }
16
   } while (dy >= 0);
17

18
   while (dx++ < a) { /* fehlerhafter Abbruch bei flachen Ellipsen (b=1) */
19
       setPixel(xm+dx, ym); /* -> Spitze der Ellipse vollenden */
20
       setPixel(xm-dx, ym);
21
   }
22
}
23

24
void circle(int xm, int ym, int r)
25
{
26
  ellipse(xm, ym, r, r);
27
}

Funktionen kann man evtl. Farben mit übergeben und den setpixel in den 
Funktionen dann mitgeben.

Ab dem Moment, bei dem es schon ein funktionierendes Setpixel oder 
Putpixel schon gibt, gibt es zig Funktionen im Netz verfügbar, die von 
der Hardware unabhängig sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren