UTFT - drawRoundRect() Funktion - Radius ändern?

Hallo,

habe ein kleines Menü auf einem 3,2" Touchscreen programmiert. Bei Druck soll nun ein roter Rand um das betreffende Icon gezeichnet werden.
Die Icons liegen als Bitmap auf der SD-Karte und sind alle 80x80px groß.
Alle haben einen umgebenden, weißen Rand von 3px.

Leider ist der Radius der Icons ein anderer, wie die drawRoundRect() Funktion erzeugt.
Sieht irgendwie komisch aus. Daher wollte ich fragen, ob es möglich ist, den Radius, mit dem das gerundete Rechteck gezeichnet wird, irgendwie zu beeinflussen.?

Ich möchte ungern alles aus einzelnen Linien und Pixeln aufbauen, da das einfach zu lange braucht, bis es auf dem TFT gerendert ist...

Am besten wäre es, die Funktion umzumodeln.
Zum Beispiel in dieser Art: drawRoundRect(x1,y1,x2,y2, radius)

Evtl. wäre ein weiterer Parameter wie Strichdicke in Pixeln noch wünschenswert. Ich kann aber auch einfach 3x das gerundete Rechteck zeichnen!

Leider weiß ich nicht, wo ich da genau in der Lib ansetzten kann...

Vielen Dank!
Gruß Danie

hi,

welche library verwendest Du?

ich bin nach kurzer suche bei

gelandet, dort gibt man einen radius ein...

gruß stefan

Hallo,

entschuldigung!
Ich nutze diese TFT Library

Im Grunde geht es um diese Funktion in der "UTFT.cpp":

void UTFT::drawRoundRect(int x1, int y1, int x2, int y2)
{
	if (x1>x2)
	{
		swap(int, x1, x2);
	}
	if (y1>y2)
	{
		swap(int, y1, y2);
	}
	if ((x2-x1)>4 && (y2-y1)>4)
	{
		drawPixel(x1+1,y1+1);
		drawPixel(x2-1,y1+1);
		drawPixel(x1+1,y2-1);
		drawPixel(x2-1,y2-1);
		drawHLine(x1+2, y1, x2-x1-4);
		drawHLine(x1+2, y2, x2-x1-4);
		drawVLine(x1, y1+2, y2-y1-4);
		drawVLine(x2, y1+2, y2-y1-4);
	}
}

So wie ich das verstehe, wird für die Rundung einfach ein Pixel in jede Ecke gezeichnet und diese dann mit 2 horizontal und 2 vertikalen Linien verbunden. Damit es kein komplettes Rechteck gibt werden die Anfangs und Endpunkte der Linien verkürzt.

Ich möchte jetzt einen weiteren Parameter wie Radius mit übergeben.
Auf Grund dieser Variable soll die Rundung dann beeinflussbar sein.

Mir fällt aber leider gerade nicht ein, wie man das geschickt lösen könnte.
Gerade versuch ich es mit einer while() Schleife hinzubekommen. Die Ergebnisse sind bisher aber garnicht zu gebrauchen :grinning:

Vielen Dank!
Gruß Danie

Nimm die Adafruit-Lib.
Die kann sowas. :sunglasses:

Rabenauge:
Nimm die Adafruit-Lib.
Die kann sowas. :sunglasses:

Hallo, danke für den Tipp.
Aber eine Frage: unterstützt die Adafruit Lib auch die SD-Karte auf dem TFT-Modul?
Wollte auch nicht so viel im Code ändern, da er schon so gut wie läuft.

Grur Danie

Keine Ahnung, welches Display du genau hast- aber die meisten dürften mehr ode weniger identische Nachbauten der Adafruits sein.
Wieso alle Welt UTFT nutzen will, trotz andauernder Probleme, verschliesst sich mir ebenfalls.
Ich bin bisher immer mit den Adafruit-Lib.s bestens gefahren (auch mit Hardware von diversen Chinesen).
Meine 1.8er TFT’s laufen damit immer-auch die SD-Slots.

Hallo,

ich hatte bisher keinerlei Probleme mit der Lib - alles funktioniert so wie es soll.
Daher möchte ich jetzt auch ungern nochmal auf eine andere Lib umsteigen.

Wie könnte die Funktion sinnvoll abgeändert werden, damit der Radius änderbar ist?
Ich hab irgendwie keine zündende idee :frowning:

Das kann doch nicht so schwer sein. Ich steh aber irgendwie auf dem Schlauch.

Vielen Dank!
Gruß Danie