C-Berry: Kreise zeichnen

C-Berry: Kreise zeichnen

Heute gibt es den nächsten Schnipsel C-Code rund um das C-Berry Display. Diesmal geht es um das Zeichnen von Kreisen.
Mit tft_circle lassen sich, wie schon geschrieben, Kreise auf das Display zeichnen.

Aufgerufen wird der Befehl mit den folgenden Parametern:

tft_circle position_x position_y radius füllfarbe modus

Dabei haben die einzelnen Parameter folgende Wertebereiche:

  • Position_X: 0…319
  • Position_Y: 0…239
  • Radius: 0…319
  • Füllfarbe: 0…255
  • Modus: 0 – nicht gefüllt, 1 – gefüllt zeichnen

In dieser Version lassen sich nur gefüllte Kreise zeichnen, will man einen einfachen Kreis ohne Füllfarbe, zeichnet man einfach einen zweiten Kreis an die gleiche Position, verkleinert den Radius und nutzt die aktuelle Hintergrundfarbe zum Zeichnen. Ich denke darüber nach, eine zweite Version zu schreiben, die das automatisch erledigt. Mal sehen… ;-).

Update!

Ich habe mich nochmal durch den Beispielcode gekämpft und gesehen, dass es da schon eine Option gibt, Kreise und Rechtecke gefüllt oder eben nicht gefüllt zu zeichnen. Sourcecode und Datei zum Download sind entsprechend aktualisiert.

Hier nun der Quelltext:

/* - Zeichnet einen Kreis auf das Display
 
 Benutzung: tft_circle Position_X Position_Y Radius Füllfarbe Modus 
 Wertebereich der Parameter:
 Position_X: 0...319
 Position_Y: 0...239
 Radius: 0...319 (von mir willkürlich festgelegt ;-)
 Füllfarbe: 0...255
 Modus 0/1 (0 - keine Füllfarbe, 1 - gefüllt zeichnen)
*/


#include <stdio.h>
#include <stdlib.h>
#include "RAIO8870.h"
#include "tft.h"


int main (int argc, char *argv[]){

 if(!bcm2835_init()){
 printf("Kann Display nicht initalisieren. Abbruch!");
 exit(1);
 }

 if( argc < 6 || argc > 6){
 printf("tft_circle: Error, check parameter! usage: tft_circle x y radius color mode\n");
 exit(1);
 }

 int x=atoi(argv[1]);
 int y=atoi(argv[2]);
 int r=atoi(argv[3]);
 int color=atoi(argv[4]);
 int mode=atoi(argv[5]);
 
 if( x < 0 || x > 319){
 printf("tft_circle: Error, x out of range! x: 0...319\n");
 exit(1);
 }
 
 if( y < 0 || y > 239 ){
 printf("tft_circle: Error, y out of range! y: 0...239\n");
 exit(1);
 }
 
 if( r < 0 || r > 319){
 printf("tft_circle: Error, radius out of range! radius: 0...319\n");
 exit(0);
 }

 if ( color < 0 || color > 255 ){
 printf("tft_circle: Error, color out of range! color: 0...255\n");
 exit(1);
 }
 
 if (mode < 0 || mode > 1){
 printf("tft_circle: Error, set mode=0 or mode=1!\n");
 exit(1);
 }


 Draw_Circle ( x, y, r );
 Text_Foreground_Color ( color );
 
 if( mode==0){
 RAIO_StartDrawing ( CIRCLE_NONFILL );
 }
 else {
 RAIO_StartDrawing ( CIRCLE_FILL);
 }

 return 0;
}

Und für alle, die zu faul zum Abtippen sind, hier das File zum Download.

 

Kommentare sind geschlossen.