blibiothèque de fonctions en C.Basic
Posté le 24/01/2019 19:30
Bonjour les casionautes!!!
aujourd'hui je suis fiers de vous présenter un projet que j'ai à peine commencé mais dont je suis très fiers... suspense...
une bibliothèque de fonctions en C.Basic pour graphs 90+e... je vois quelques déçus... (merci sentaro21 pour ce magnifique interpréteur de Basic)
si je fait cette bibliothèque que sur la fameuse graph 90+e (et toutes celle qui supporte la même version de C.Basic), c'est parce que le thème des fonctions de cette bibli est portées sur...
les couleurs et les dégradés !!!
liste des fonctions
Cliquer pour enrouler
Circle
Cliquer pour enrouler
la fonction c'est :
{coordonnée x du centre,coordonnée y du centre, rayon, Red de départ, Green de départ, Blue de départ, Red d'arrivé, Green d'arrivé, Blue d'arrivé, angle de départ, épaiseur}→List Ans:Prog "_Circle"
ce qui donne :
.
F-Line
Cliquer pour enrouler
la fonction c'est :
{coordonnée x de départ,coordonnée y de départ, coordonnée x d'arrivée, coordonnée y d'arrivée, Red de départ, Green de départ, Blue de départ, Red d'arrivé, Green d'arrivé, Blue d'arrivé, épaiseur}→List Ans:Prog "_F-Line"
ce qui donne :
.
Text
Cliquer pour enrouler
la fonction c'est :
{coordonnée x de départ,coordonnée y de départ, Red de départ, Green de départ, Blue de départ, Red d'arrivé, Green d'arrivé, Blue d'arrivé, épaiseur}→List Ans:"/*texte*/"→Str 1:Prog "_Text"
ce qui donne :
.
le tout donne ça :
.
puisque je suis sympa
je m'apprend un truc , je vous laisse les programme C.Basic qui font les fonctions dans le fichier joint, pour que vous puissiez voir que je suis un
énorme bourrin niveau code
si vous voulez m'aider, vous pouvez (en me conseillant ou en optimisant mon code par exemple) et sinon, la fonction que je vais commencer va faire des carrés et des rectangles tout zoli
(en fait, avant ça, je vais faire des lignes, pour m'entrainer entre autre...)
Cordialement,
votre cher Manolo
Fichier joint
Citer : Posté le 24/01/2019 20:59 | #
Oooh... pas mal cette idée.
Que dis-tu de donner un nom bien fixé à ta bibliothèque et de le mettre en préfixe de tes noms de programmes ? Ça évitera les collisions avec les noms de sous-programmes de tes utilisateurs dans le futur. Par exemple, si tu appelles ta bibliothèque "Manolo's C.Basic Library" (au hasard) tu peux appeler ton programme MCL_Cercle (plus de 8 caractères ça passe ?).
@Sentaro21, something for you now!
Are you working with the linear or gamma color space? Do you have any code to manage this specifically? The gradient on the screenshots looks pretty good but I'd be surprised if the calculator worked in linear mode.
This is also something I'm concerned about because I'm planning on doing some blending graphics in the future and I need to heed for gamma properly.
Citer : Posté le 24/01/2019 21:38 | #
Pas con, je teste, et désolé si j'ai pas suivi ton conseil et d'utiliser le gama (dans la shout, hier).
Ajouté le 24/01/2019 à 21:25 :
C'est 8 caractères max... (Pour le nom du prgm)
Ajouté le 25/01/2019 à 00:39 :
Mince, j'ai fais une erreur dans mon code, je vais le corriger demain mais en attendant, je vous donne le truc, dans le programme, dans les lignes 1, 2 et 3, à un moment, il y a "240-:-", il faut le remplacer par "235-:-". Déso.
Citer : Posté le 25/01/2019 09:13 | #
@Manolo
Thanks for C.Basic application!
It is a very beautiful gradation.
It may be easier to calculate the gradation using HSV or HSL.
To change the drawing thickness, please use the ML command.
(_Point X,Y,Width or _FillCircle X,Y,Radius)
// Radius->List Ans[11]
RGB(List Ans[4],List Ans[5],List Ans[6])
_FillCircle (List Ans[1]+List Ans[3]sin (U)),(List Ans[2]-List Ans[3]cos (U)),List Ans[11]
@Lephenixnoir
Yes!
C.Basic supports only linear scale of RGB888.
However, the accuracy is in the range of RGB565.
// d=RGB565 to RGB888(r,g,b)
b = ((d & 0x001F) << 3);
g = ((d & 0x07E0) >> 3);
r = ((d & 0xF800) >> 8);
//RGB888(r,g,b) to RGB565
RGB565 = ((r<<8)&0xF800) | ((g<<3)&0x7E0) | ((b>>3)&0x1F);
HSV and HSL are processed with RGB888.
void hsv2rgb( int H, int S, int V, int *R, int *G, int *B ){ // h:0~359 s:0~255 v:0~255 ->RGB(0~255)
int max,min;
max = V;
min = ((max*255)-(S*max)+128)/255;
if ( H<= 60 ) {
*R = max;
*G = ((H)*(max-min)+min*60+30)/60;
*B = min;
} else
if ( H<=120 ) {
*R = ((120-H)*(max-min)+min*60+30)/60;
*G = max;
*B = min;
} else
if ( H<=180 ) {
*R = min;
*G = max;
*B = ((H-120)*(max-min)+min*60+30)/60;
} else
if ( H<=240 ) {
*R = min;
*G = ((240-H)*(max-min)+min*60+30)/60;
*B = max;
} else
if ( H<=300 ) {
*R = ((H-240)*(max-min)+min*60+30)/60;
*G = min;
*B = max;
} else {
*R = max;
*G = min;
*B = ((360-H)*(max-min)+min*60+30)/60;
}
}
void hsl2rgb( int H, int S, int L, int *R, int *G, int *B ){ // H:0~359 s:0~255 v:0~255 ->RGB(0~255)
int max,min;
if ( L<128 ) {
max = ((L*255)+L*S+128)/255;
min = ((L*255)-L*S+128)/255;
} else {
max = ((L*255)+(255-L)*S+128)/255;
min = ((L*255)-(255-L)*S+128)/255;
}
if ( H<= 60 ) {
*R = max;
*G = ((H)*(max-min)+min*60+30)/60;
*B = min;
} else
if ( H<=120 ) {
*R = ((120-H)*(max-min)+min*60+30)/60;
*G = max;
*B = min;
} else
if ( H<=180 ) {
*R = min;
*G = max;
*B = ((H-120)*(max-min)+min*60+30)/60;
} else
if ( H<=240 ) {
*R = min;
*G = ((240-H)*(max-min)+min*60+30)/60;
*B = max;
} else
if ( H<=300 ) {
*R = ((H-240)*(max-min)+min*60+30)/60;
*G = min;
*B = max;
} else {
*R = max;
*G = min;
*B = ((360-H)*(max-min)+min*60+30)/60;
}
}
void rgb2hsv( int R, int G, int B, int *H, int *S, int *V ){ // RGB(0~255) -> H:0~359 S:0~255 V:0~255
int max,min;
max = R;
if ( G > max ) max = G;
if ( B > max ) max = B;
min = R;
if ( G < min ) min = G;
if ( B < min ) min = B;
if ( R==max ) *H = (G-B)*60/(max-min);
else
if ( G==max ) *H = (B-R)*60/(max-min)+120;
else
if ( B==max ) *H = (R-G)*60/(max-min)+240;
if ( *H < 0 ) *H += 360;
*S = (max-min)*255/max;
*V = max;
}
void rgb2hsl( int R, int G, int B, int *H, int *S, int *L ){ // RGB(0~255) -> H:0~359 S:0~255 L:0~255
int max,min;
max = R;
if ( G > max ) max = G;
if ( B > max ) max = B;
min = R;
if ( G < min ) min = G;
if ( B < min ) min = B;
if ( R==max ) *H = (G-B)*60/(max-min);
else
if ( G==max ) *H = (B-R)*60/(max-min)+120;
else
if ( B==max ) *H = (R-G)*60/(max-min)+240;
if ( *H < 0 ) *H += 360;
*L = (max+min)/2;
if ( *L < 128 ) {
*S = ((max-min)*255)/(max+min);
} else {
*S = ((max-min)*255)/(510-max-min);
}
}
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 25/01/2019 17:52 | #
That's nice, well done!
As I mentioned above, it would be very useful, I believe, to allow programs with names longer than 8 characters. Do you think this would be possible?
Citer : Posté le 25/01/2019 18:15 | #
sorry @sentaro21 but as with a lot of graphical functions in C.Basic, it doesn't appear during a loop.
Ajouté le 25/01/2019 à 18:09 :
otherwise, just with the "circle" function, it works.
Citer : Posté le 26/01/2019 06:55 | #
@Lephenixnoir
The specification of the file name is based on the specification of the monochrome version.
In the future I would like to update it according to the specifications of the CG series OS(similar to FAT32).
@Manolo
The most of all extended graphics commands are not transferred to the LCD screen after command execution.
Therefore, the following commands are required for display LCD screen.
// Transfer 0 to 191 lines.
PutDispDD
// Transfer -24 to 191 lines.
_DispVram
The difference between these two commands is,
PutDispDD does not include the status line, but _DispVram transfers full screen.
If you add a semicolon at the end, the refresh rate will be controlled.
It is possible to prevent wasteful transfer.
(Normal 90+E/CG50 can only transfer about 90fps.)
// Transfer 0 to 191 lines with refresh rate controll.
PutDispDD;
// Transfer -24 to 191 lines with refresh rate controll.
_DispVram;
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 26/01/2019 11:26 | #
ah, okay....
Ajouté le 27/01/2019 à 11:56 :
une MàJ de la fonction cercle arrive cet aprèm et une fonction line arrive bientôt.
Citer : Posté le 27/01/2019 14:04 | #
Je suis impatient d'y être.
Un indice pour en faire une bibliothèque complète.
Les variables utilisées uniquement dans les sous-programmes peuvent être des variables locales.
Local A,B,C,x,y,z
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 27/01/2019 21:45 | #
c'est bon, j'ai fait la MàJ du topic ! je devais la faire cet après-midi normalement...
Ajouté le 27/01/2019 à 21:29 :
ah yes ! thank you sentaro21 !
Ajouté le 28/01/2019 à 17:38 :
Je viens de remarquer, mais il y a une sorte de rond bizarre à la fin du tracé, invisible quand le cercle est fin mais trop visible quand le cercle est épais... Si quelqu'un a une solution (je pense que Sentaro21 en a une )
Citer : Posté le 28/01/2019 18:03 | # | Fichier joint
Tu veux parler de ça ?
Citer : Posté le 28/01/2019 18:39 | #
C'est une bonne idée ! À quand les lignes toutes simples ?
Citer : Posté le 28/01/2019 19:02 | #
@Lephenixnoir
C'est exactement ça !
@Kikoodx
Hein? Remplacer les rond (qui composent le rond rond-ception !) par des lignes ? Pas con...
Citer : Posté le 28/01/2019 19:08 | #
Ça a l'air d'être parce que tu repasses au même endroit dans une couleur différente. Si les couleurs de début et de fin sont rigoureusement les mêmes, ça ne devrait pas se voir.
Citer : Posté le 28/01/2019 20:48 | #
C'est déjà le cas, c'est bizarre... omg
Citer : Posté le 29/01/2019 08:29 | # | Fichier joint
I tried using _Line command instead of Circle command.
How about this one?
[Fichier joint] _Circle2.zip
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 29/01/2019 18:30 | #
I noticed that PutDispDD function does not allow to erase everything from graphic screen, is this normal?
Citer : Posté le 30/01/2019 00:38 | #
Yes.
It transfers only the area used by Basic Casio by default.
However it can select the transfer area,
You can also transfer the full screen.
Or, if you use _DispVram, it will be full screen transfer by default.
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 31/01/2019 18:41 | #
ça marche pas... ça me met un syntax error...
Citer : Posté le 01/02/2019 00:34 | #
Oh, I'm sorry!
I mistaked in the syntax.
PutDispDD@-24,191
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Citer : Posté le 03/02/2019 12:06 | #
c'est bon ! il y a la MàJ ! venez voir !!!