Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » FXPaint
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

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)



1, 2 Suivante
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

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
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

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.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

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 ?
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 11/08/2014 18:20 | #


Theprog a écrit :
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 :
Lephenixnoir a écrit :
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 :
Theprog a écrit :
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
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 11/08/2014 18:28 | #


Cartix a écrit :
Bombe de peinture

Facile à faire

while( IsKeyDown (K_EXE) )
{
      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


Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

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.)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 11/08/2014 18:34 | #


Smashmaster a écrit :
Cartix a écrit :
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
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 11/08/2014 18:35 | #


Cartix a écrit :
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 ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 11/08/2014 18:38 | #


Lephenixnoir a écrit :
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
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

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...
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 11/08/2014 18:41 | #


C'est un des algos qui m'emmerde le plus... tu peux y aller simplement :
void fill(int x, int y)
{
  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...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

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...
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 11/08/2014 18:48 | #


Une liste doublement chaînée ? Tu veux dire, par pixel ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

Citer : Posté le 11/08/2014 18:49 | #


Ouaip...
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

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
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

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.
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

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...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

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...

Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 11/08/2014 19:18 | #


Ben voyons. Et tu crois qu'elle fonctionne comment, la structure ?

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 83 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd