Soyez le premier à donner votre avis sur cette source.
Vue 6 577 fois - Téléchargée 406 fois
#include <iostream.h> #include <stdlib.h> #include <windows.h> #include <stdio.h> #include <time.h> #include <math.h> void initialisation_BMP(FILE *stream, unsigned int t, unsigned int hauteur, unsigned int largeur) { const char *format="BM"; //identification du format bitmap fwrite(format,1,2,stream); unsigned int taille=t+54; //taille du header (donc sans les donnees images) fwrite(&taille,sizeof(int),1,stream); unsigned int reserved=0; //vaut zéro, je ne sais pas pourquoi fwrite(&reserved,sizeof(int),1,stream); unsigned int offset=54; //début des données images par rapport au début du fichier (octets) fwrite(&offset,sizeof(int),1,stream); unsigned int taille_entete=40; //taille de cet en-tête fwrite(&taille_entete,sizeof(int),1,stream); fwrite(&largeur,sizeof(int),1,stream); //en pixels fwrite(&hauteur,sizeof(int),1,stream); //en pixels short plans=1; //mettre cette valeur à 1 fwrite(&plans,sizeof(short),1,stream); short bits_per_pixels=24; //16 777 216 couleurs fwrite(&bits_per_pixels,sizeof(short),1,stream); unsigned int compression=0; //pas de compression RLE fwrite(&compression,sizeof(int),1,stream); unsigned int taille_image=t; //taille des données image (octets) fwrite(&taille_image,sizeof(int),1,stream); unsigned int resolution_horizontale=1024; //nbre de pixels par mètre, pour l'impression fwrite(&resolution_horizontale,sizeof(int),1,stream); unsigned int resolution_verticale=1024; //nbre de pixels par mètre, pour l'impression fwrite(&resolution_verticale,sizeof(int),1,stream); unsigned int colors_used=0; //toutes les couleurs (pas de palette de couleur car on est en 24 bits fwrite(&colors_used,sizeof(int),1,stream); unsigned int colors_important=0; //toutes les couleurs sont importantes fwrite(&colors_important,sizeof(int),1,stream); } void ecriture_donnees(FILE *stream, unsigned int t) { unsigned char bleu=1, vert=1, rouge=1; randomize(); for (unsigned int i=0;i<t;i+=3) { //ecriture d'un pixel (24 bits, ou 8*3) if (rouge==255) {if (vert==255) {if (bleu<255) bleu++; else bleu=1;}} fwrite(&bleu,1,1,stream); if (rouge==255) {if (vert<255) vert++; else vert=1;} fwrite(&vert,1,1,stream); if (rouge<255) rouge++; else rouge=1; fwrite(&rouge,1,1,stream); //fin de l'ecriture du pixel, choisissez les valeurs que vous voulez //pour ecrire le bleu vert rouge de chaque pixel, valeur max=255 (1 octet). //on peut par exemple créer un dégradé de couleurs (fonction sinus sur //le bleu par exemple), ou les écrire toutes (ce que j'ai //essayé de faire mais ça n'a pas marché, car il faudrait une taille d'image //extrêmement grande), etc... } } void main(void) { unsigned int hauteur, largeur; cout<<"Entrez la largeur d'image voulue (en pixels) : "; cin>>largeur; cout<<endl; cout<<"Entrez la hauteur d'image voulue (en pixels) : "; cin>>hauteur; cout<<endl; unsigned int taille=hauteur*largeur*3; //taille des données image sans les entêtes FILE *file; file=fopen("image.bmp","wb"); initialisation_BMP(file, taille, hauteur, largeur); //création des entêtes ecriture_donnees(file, taille); //écriture des données image fclose(file); //system("pause"); }
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?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.