CRÉATION IMAGE BITMAP ALÉATOIRE OU COMME VOUS VOULEZ :)
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
20 déc. 2003 à 17:35
cs_fuliculi
Messages postés43Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 3 mai 2010
-
4 mai 2004 à 22:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_fuliculi
Messages postés43Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 3 mai 20106 4 mai 2004 à 22:03
Ton code est très pratique mais j'ai rencontré un léger bug qui peut apparaître. Un décalage dans les couleurs. Pour régler le problème, j'ai du recourir à la force brute. Je place le pointeur manuellement au bon endroit pour chaque pixel. Je sais, c'est plus long mais ça m'a permis de corriger le bug. Bug qui ne doit pas venir de ton programme mais de la gestion de la mémoire par visual. Il n'est donc pas utile d'appliquer la modif pour ceux qui n'ont pas rencontré le bug. Ca donne quelque chose comme ça :
for(unsigned long i=0; i<hauteur*largeur; i++)
{
c = mText->getRGB(i);
pos = off + i*3;
fsetpos( stream,&pos );
val = (unsigned char)(c.b*255);
fwrite(&val,1,1,stream);
val = (unsigned char)(c.g*255);
fwrite(&val,1,1,stream);
val = (unsigned char)(c.r*255);
fwrite(&val,1,1,stream);
}
Hellaynnea
Messages postés57Date d'inscriptionsamedi 14 décembre 2002StatutMembreDernière intervention 2 mai 2005 28 déc. 2003 à 22:13
Pour les sockets j'ai récupéré une source d'objets sockets sur le net super pratique (licence GPL) je fais mes projets avec ca maintenant :)
Si ca t'intéresse jte l'enverrai.
++hellaynnea
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 23 déc. 2003 à 11:27
et si jamais ta besoin d'aide laisse un message sur le forum(moi j'y connai rien au sockets)
a+
cs_jb60
Messages postés55Date d'inscriptionmardi 16 septembre 2003StatutMembreDernière intervention 4 août 2008 23 déc. 2003 à 01:00
Non djl, dans l'exemple que j'ai écrit, le choix de la couleur pour chaque pixel du dessin se fait par implémentations successives (d'abord du rouge, puis du vert et enfin du bleu). Je pense que tu as du le voir tout seul, car j'ai vu quelques unes de tes sources, et tu es vraiment fort, j'ai vu que tu faisais même de la programmation OpenGL (effet de l'eau qui ondule, trop cool). Mais tu peux très bien changer à ton gré l'algorithme d'écriture pour chaque pixel du dessin. On peut donc très bien imaginer mettre un niveau de vert, bleu et rouge pour chaque pixel de façon aléatoire, en faisant simplement un random(256) pour le bleu, le vert et le rouge (c'est pour ca que j'avais mis les headers time.h et stdio.h ou stdlib.h, je sais plus).
Mais l'image obtenue n'est pas agréable du tout, ça ne ressemble a rien (tu peux t'en douter puisque c'est aléatoire...). J'avais écrit le code de cette manière au début, mais je l'ai ensuite changé en écrivant chaque couleur avec une fonction sinus pour faire un dégradé sur les couleurs, puis je l'ai écris comme il est dans le zip. Mais les goûts et les couleurs....
Donc voilà, j'espère que mon explication t'a plut.
Sinon, en ce moment je me concentre un peu sur les sockets, j'aimerais faire un petit outil de communication entre deux PC distants, ça m'interesse, mais la je débute simplement, je ne comprends pas encore tout. Voilà, encore merci pour tout vos commentaires, et si quelqu'un peut m'aider (djl par exemple :) lol)
sur les sockets avec des trucs intéressants, qu'il n'ésite pas...
Au fait, j'ai vu qu'il y a un classement sur cppfrance qui donne les personnes les plus actives sur le site, avec un système de points, mais moi, lorsque j'ajoute une source par exemple, je ne recois pas de points, alors que c'est ce qui donne le plus de points d'après les explications de Nix je crois. En ce moment je n'ai que 3 points, et je crois qu'ils sont dus à mes réponses sur deux ou trois sondages auxquels j'ai répondu. Donc si on pouvait m'expliquer un peu plus ce truc, vu que j'ai vu que les scores des plus actifs d'entre nous sont largement supérieurs à 500. Merci d'avance et bonne prog à tous.
JB
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 22 déc. 2003 à 20:55
ca marche bien ;) (a part la taille des images!)
mais c'est vraiment aleatoire?
cs_jb60
Messages postés55Date d'inscriptionmardi 16 septembre 2003StatutMembreDernière intervention 4 août 2008 21 déc. 2003 à 21:15
tu as raison djl, il faut bien mettre * 3 et non pas *24 pour le calcul de la taille, je me suis légèrement embrouillé la tête entre les bits et les octets...
Désolé pour cette erreur (mais qui n'était qu'un simple erreur d'inattention (c'est pas de ma faute, lol).
Je corrigerais la source quand j'aurais le temps.
cs_jb60
Messages postés55Date d'inscriptionmardi 16 septembre 2003StatutMembreDernière intervention 4 août 2008 21 déc. 2003 à 20:43
En fait, j'ai compilé ça sous borland c++ 5.02 (désolé j'avais oublié de mettre le compilo dans la description de la source).
Je vais ajouter un exe dans le zip et mettre une capture d'écran...
ClamC, je ne sais pas ce que ça donne sous visual c++ 6, je ne l'ai pas... Mais je pense que ça doit tout aussi bien marcher, à moins qu'il ne faille changer les headers pour la conformité avec ton compilateur.
Voila.
ClamC
Messages postés5Date d'inscriptionmercredi 17 décembre 2003StatutMembreDernière intervention21 décembre 2003 21 déc. 2003 à 12:05
ca donne koi pour microsoft visual C++ 6 ????
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 20 déc. 2003 à 18:42
juste une chose a propos du code, fais
taille=hauteur*largeur*3; au lieu de
taille=hauteur*largeur*24; pour eviter certaines ioncoherences
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 20 déc. 2003 à 17:35
4 mai 2004 à 22:03
Ccolor c; //classe maison
fpos_t off;
fpos_t pos;
fgetpos( stream,&off );
unsigned char val;
for(unsigned long i=0; i<hauteur*largeur; i++)
{
c = mText->getRGB(i);
pos = off + i*3;
fsetpos( stream,&pos );
val = (unsigned char)(c.b*255);
fwrite(&val,1,1,stream);
val = (unsigned char)(c.g*255);
fwrite(&val,1,1,stream);
val = (unsigned char)(c.r*255);
fwrite(&val,1,1,stream);
}
28 déc. 2003 à 22:13
Si ca t'intéresse jte l'enverrai.
++hellaynnea
23 déc. 2003 à 11:27
pour les sockets tu pourra trouve des tuto ici
http://www.programmation.org/tutoriaux/tutoriaux_prog/tutoriaux.php?lang=reseau
et si jamais ta besoin d'aide laisse un message sur le forum(moi j'y connai rien au sockets)
a+
23 déc. 2003 à 01:00
Mais l'image obtenue n'est pas agréable du tout, ça ne ressemble a rien (tu peux t'en douter puisque c'est aléatoire...). J'avais écrit le code de cette manière au début, mais je l'ai ensuite changé en écrivant chaque couleur avec une fonction sinus pour faire un dégradé sur les couleurs, puis je l'ai écris comme il est dans le zip. Mais les goûts et les couleurs....
Donc voilà, j'espère que mon explication t'a plut.
Sinon, en ce moment je me concentre un peu sur les sockets, j'aimerais faire un petit outil de communication entre deux PC distants, ça m'interesse, mais la je débute simplement, je ne comprends pas encore tout. Voilà, encore merci pour tout vos commentaires, et si quelqu'un peut m'aider (djl par exemple :) lol)
sur les sockets avec des trucs intéressants, qu'il n'ésite pas...
Au fait, j'ai vu qu'il y a un classement sur cppfrance qui donne les personnes les plus actives sur le site, avec un système de points, mais moi, lorsque j'ajoute une source par exemple, je ne recois pas de points, alors que c'est ce qui donne le plus de points d'après les explications de Nix je crois. En ce moment je n'ai que 3 points, et je crois qu'ils sont dus à mes réponses sur deux ou trois sondages auxquels j'ai répondu. Donc si on pouvait m'expliquer un peu plus ce truc, vu que j'ai vu que les scores des plus actifs d'entre nous sont largement supérieurs à 500. Merci d'avance et bonne prog à tous.
JB
22 déc. 2003 à 20:55
mais c'est vraiment aleatoire?
21 déc. 2003 à 21:15
Désolé pour cette erreur (mais qui n'était qu'un simple erreur d'inattention (c'est pas de ma faute, lol).
Je corrigerais la source quand j'aurais le temps.
21 déc. 2003 à 20:43
Je vais ajouter un exe dans le zip et mettre une capture d'écran...
ClamC, je ne sais pas ce que ça donne sous visual c++ 6, je ne l'ai pas... Mais je pense que ça doit tout aussi bien marcher, à moins qu'il ne faille changer les headers pour la conformité avec ton compilateur.
Voila.
21 déc. 2003 à 12:05
20 déc. 2003 à 18:42
taille=hauteur*largeur*3; au lieu de
taille=hauteur*largeur*24; pour eviter certaines ioncoherences
20 déc. 2003 à 17:35