FXPaint
Posté le 11/08/2014 18:14
Salut à tous. J'ouvre ici un topic pour parler de l'avancement de mon projet d'éditeur de bitmap.
Ajd je n'ai pas le temps de faire un long message, donc je changerai ça demain. Néanmoins, je poste ici ajourd'hui afin de récolter, si possible, des idées d'outils que vous aimeriez voir dans un éditeur d'image.
Voici donc la liste des outils disponibles et celle des outils prévus. Si vous avez d'autres idées, n'hésitez pas à proposer
Outils Disponibles
Cliquer pour enrouler
Dessiner une ligne
Dessiner un rectangle (comme dans le premier .gif)
Fonction de pinceau, comme celle disponible dans le menu SKTCH de l'application GRAPH
Fonction de remplissage (Pot de peinture) (comme à la fin du premier .gif)
Dessiner un cercle
Dessiner une ellipse
Copier-Couper-Coller-Déplacer
Fonction de zoom, permettant de modifier l'image pixel par pixel, de façon précise (comme dans le second .gif)
Ouverture d'une bitmap dans la mémoire de stockage
Enregistrement d'une bitmap dans la mémoire de stockage (Save et Save As)
Ouverture d'une Picture (actuellement il faut avoir transférer cette picture dans la mémoire de stockage, mais j'y travaille)
Enregistrement d'une Picture
Outils Prévus
Cliquer pour enrouler
Exportation sous forme de liste pour le drawstat
Exportation sous forme de sprite pour le LuaFX
Bombe de peinture
Différents motifs de pinceaux/brosse (comme dans paint)
Citer : Posté le 11/08/2014 18:15 | #
Je changerai la mise en page du topic demain, je n'en ai pas le temps maintenant
Citer : Posté le 11/08/2014 18:18 | #
Gestion de calques?
Etant donné que je ne n'ai jamais programmé en C sur la G85 et que je ne sais pas combien de RAM possède la G85, je ne sais pas si c'est faisable.
Citer : Posté le 11/08/2014 18:18 | #
Ca me semble plutôt cool
Si tu arrives a faire en sorte qu'on puisse exporter en drawstat en plus ça sera ultra génial pour faire des jeux on calc
Et on peut choisir la taille de l'image ou c'est seulement du 128*64 ?
Citer : Posté le 11/08/2014 18:19 | #
Il faudrait pouvoir dessiner des ellipses à la manière des rectangles. Sinon, je regrette ce curseur vraiment pas pratique.
Citer : Posté le 11/08/2014 18:20 | #
Ca me semble plutôt cool
Si tu arrive a faire en sorte qu'on puisse exporter en drawstat en plus ça sera ultra génial pour faire des jeux on calc
C'est le but. (C'est pour ça qu'on peut déjà enregistrer sous une picture, mais je dois travailler sur l'interface encore, pour choisir le numéro, et j'aimerais qu'on ai pas besoin de la transférer avant dans la mémoire de stockage pour l'ouvrir)
Pour la gestion des calques je vois voir ce que je peux faire
Ajouté le 11/08/2014 à 18:22 :
Il faudrait pouvoir dessiner des ellipses à la manière des rectangles. Sinon, je regrette ce curseur vraiment pas pratique.
C'est comme ça que j'ai programmé l'outils ellipse, avec un rectangle en pointillé autour de l'ellipse jusqu'à ce qu'on appuie sur [EXE]
Que veux tu dire par vraiment pas pratique ?
Ajouté le 11/08/2014 à 18:23 :
Et on peut choisir la taille de l'image ou c'est seulement du 128*64 ?
Ca c'est le prochain truc sur la liste à faire, avec le choix de la taille du zoom. Mais normalement ça devrait aller vite à faire
Citer : Posté le 11/08/2014 18:28 | #
Bombe de peinture
Facile à faire
{
int rayon = Rand (0, rayonMax); //rayonMax est choisi par l'utilisateur
int angle = Rand (0, 360);
PlacerPixel ( rayon * cos(angle) + x , rayon * sin(angle) + y); //(x,y) est la position du curseur
}
Ajouté le 11/08/2014 à 18:31 :
Concernant le curseur, je pense qu'il n'est pas assez discret, un curseur de ce genre serait peut être mieux :
0
0
00 00
0
0
Citer : Posté le 11/08/2014 18:33 | #
C'est ce que je disais. Ce gros curseur a l'énorme inconvénient de ne pas permettre de voir le pixel sur lequel on est placé.
(Perso mon éditeur ne permettra pas d'éditer en 100%, mais on pourra avoir deux vues.)
Citer : Posté le 11/08/2014 18:34 | #
Bombe de peinture
Facile à faire
Je ne dis pas le contraire
Mais merci quand même pour l'algo, je testerai ça demain
Pour ce qui est du curseur c'est, si je ne m'abuse, le même que dans l'application graph
Citer : Posté le 11/08/2014 18:35 | #
Pour ce qui est du curseur c'est, si je ne m'abuse, le même que dans l'application graph
C'est bien ça qui est malheureux.
Par ailleurs, tu as limité un peu la récurrence sur ton pot de peinture ?
Citer : Posté le 11/08/2014 18:38 | #
Par ailleurs, tu as limité un peu la récurrence sur ton pot de peinture ?
Non, mais je sais que je dois le faire, j'ai déjà eu des erreurs à cause de ça
Citer : Posté le 11/08/2014 18:40 | #
Si c'est possible mettre des options pour les curseurs comme ca tu choisis suivant ce qui te conviens le mieux
Je suis du meme avis que LePhe et Smash, le curseur est trop gros, on voit pas ce qu'il y a dessous...
Citer : Posté le 11/08/2014 18:41 | #
C'est un des algos qui m'emmerde le plus... tu peux y aller simplement :
{
if(!get(x-1,y)) fill(x-1,y);
if(!get(x+1,y)) fill(x+1,y);
if(!get(x,y-1)) fill(x,y-1);
if(!get(x,y+1)) fill(x,y+1);
}
... mais là tu fais exploser la pile.
Sinon j'ai un algo totalement non-récursif mais il est pas encore au point...
Citer : Posté le 11/08/2014 18:47 | #
euh avec une boucle et une liste doublement chainée, ça passerait pas ?
EDIT : en fait, plutôt une pile qu'une liste doublement chainée...
Coïncidence ? Je ne pense pas.
Citer : Posté le 11/08/2014 18:48 | #
Une liste doublement chaînée ? Tu veux dire, par pixel ?
Citer : Posté le 11/08/2014 18:49 | #
Ouaip...
Coïncidence ? Je ne pense pas.
Citer : Posté le 11/08/2014 18:56 | #
C'est-à-dire au moins deux pointeurs de 4 octets par pixel. Tu parles d'une complexité spatiale
Citer : Posté le 11/08/2014 19:00 | #
J'ai dit une liste LIFO cette fois... donc un seul pointeur...
(plus un objet qui gère tout ça)
Ajouté le 11/08/2014 à 19:04 :
Mais oui, c'est barbare.
Coïncidence ? Je ne pense pas.
Citer : Posté le 11/08/2014 19:04 | #
Il faudrait faire les calculs pour savoir combien de place ça pourrait prendre... parce qu'allouer un gros bloc de RAM comme ça, c'est pas dit que ce soit toujours possible !
Et puis si tu peux pas connaître la taille du bloc à l'avance...
Citer : Posté le 11/08/2014 19:08 | #
de ce style :
[brown]#include [gray]"ListLIFO.hpp"[/gray] [green]//la lib de listes doublement chainées (qui contiennent pour chaque element une [purple]int[/purple] x et un [purple]int[/purple] y[/brown][/green]
void fill(x,y){
ListLIFO liste; [green]//c[gray]'est un objet... (en C on pourrait faire une fonction d'[/gray]instanciation mais ça ne me paraissait pas pertinent.)[/green]
[purple]int[/purple] currentx=x,currenty=y;
[b][blue]do[/blue][/b]{
liste.add(currentx,currenty);
[b][blue]if[/blue][/b](!get(x-1,y)) currentx=x-1;
[b][blue]else[/blue][/b] if(!get(x+1,y)) currentx=x+1;
[b][blue]else[/blue][/b] if(!get(x,y-1)) currenty=y-1;
[b][blue]else[/blue][/b] if(!get(x,y+1)) currenty=y+1;
[b][blue]else[/blue][/b] liste.depile(&(currentx),&(currenty));
}while(!list.isEmpty())
Ajouté le 11/08/2014 à 19:10 :
Et l'utilité de ce genre de structure, c'est qu'il n'y a pas besoin de connaitre la taille du bloc...
Coïncidence ? Je ne pense pas.
Citer : Posté le 11/08/2014 19:18 | #
Ben voyons. Et tu crois qu'elle fonctionne comment, la structure ?