Erreur : "BLOB does not name a type "
Fermé
0cTeT
Messages postés
39
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
-
Modifié par 0cTeT le 30/09/2014 à 20:15
0cTeT Messages postés 39 Date d'inscription samedi 15 juin 2013 Statut Membre Dernière intervention 30 mars 2020 - 11 oct. 2014 à 17:23
0cTeT Messages postés 39 Date d'inscription samedi 15 juin 2013 Statut Membre Dernière intervention 30 mars 2020 - 11 oct. 2014 à 17:23
A voir également:
- Does not name a type
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3005 france tv - Forum TV & Vidéo
- Erreur 10016 epson - Forum Imprimante
7 réponses
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
30 sept. 2014 à 22:01
30 sept. 2014 à 22:01
Bonsoir
avant de rentrés dans les détail à tu essayer les en-tête suivante
avant de rentrés dans les détail à tu essayer les en-tête suivante
#include <winsock2.h> #include <windows.h>
0cTeT
Messages postés
39
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
213
1 oct. 2014 à 16:05
1 oct. 2014 à 16:05
#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL_image.h>
#include "fonctions.h"
/*Suivant l'architecture de la machine, deux manières d'enregistrer des données en mémoire*/
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
#define MASQUE_ROUGE 0xff000000
#define MASQUE_VERT 0x00ff0000
#define MASQUE_BLEU 0x0000ff00
#define MASQUE_ALPHA 0x000000ff
#else
#define MASQUE_ROUGE 0x000000ff
#define MASQUE_VERT 0x0000ff00
#define MASQUE_BLEU 0x00ff0000
#define MASQUE_ALPHA 0xff000000
#endif
#define PORT 80
Entete de fichier .cpp
et ci dessous entete de main.cpp
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL_image.h>
#include "fonctions.h"
#define PORT 80
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL_image.h>
#include "fonctions.h"
/*Suivant l'architecture de la machine, deux manières d'enregistrer des données en mémoire*/
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
#define MASQUE_ROUGE 0xff000000
#define MASQUE_VERT 0x00ff0000
#define MASQUE_BLEU 0x0000ff00
#define MASQUE_ALPHA 0x000000ff
#else
#define MASQUE_ROUGE 0x000000ff
#define MASQUE_VERT 0x0000ff00
#define MASQUE_BLEU 0x00ff0000
#define MASQUE_ALPHA 0xff000000
#endif
#define PORT 80
Entete de fichier .cpp
et ci dessous entete de main.cpp
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL_image.h>
#include "fonctions.h"
#define PORT 80
0cTeT
Messages postés
39
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
213
Modifié par 0cTeT le 1/10/2014 à 16:09
Modifié par 0cTeT le 1/10/2014 à 16:09
Apparemment , d'après des recherches, il semblerait que ce soit du a une erreur de mingw. Mais comment régler ce problème ?
Et j'ai déja essayer d'inclure windows.h (après winsock2.h car sinon source d'erreurs) mais sans aucun succès
Merci pour la réponse !
Et j'ai déja essayer d'inclure windows.h (après winsock2.h car sinon source d'erreurs) mais sans aucun succès
Merci pour la réponse !
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
1 oct. 2014 à 16:48
1 oct. 2014 à 16:48
Bonjour
Avant tout la ligne de
Deuxième point il est préférable d'avoir un seul fichier d'en-tête et l'inclure dans le main et les autre fichier au lieu de les démultiplier de plus les include sont ceux du langage C pour le langage C++ il faut
Je testerais tes sources sous environnement Windows dès que possible et aussi pour la lisibilité de ton code utilise les balises mises à ta disposition
à bientôt
Avant tout la ligne de
#if SDL_BYTEORDER == SDL_BIG_ENDIANne sert Pa vraiment à grandes choses SDL gère très bien de ce côté-là
Deuxième point il est préférable d'avoir un seul fichier d'en-tête et l'inclure dans le main et les autre fichier au lieu de les démultiplier de plus les include sont ceux du langage C pour le langage C++ il faut
//C++ #include <cstdlib> #include <cstdio> #include <cstring> //Windows #include <windows.h> #include <winsock2.h> //SDL (C) #include <SDL/SDL.h> #include <SDL_image.h> //Perso #include "fonctions.h"
Je testerais tes sources sous environnement Windows dès que possible et aussi pour la lisibilité de ton code utilise les balises mises à ta disposition
à bientôt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
0cTeT
Messages postés
39
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
213
1 oct. 2014 à 22:57
1 oct. 2014 à 22:57
Merci encore ! Je sais que ces include sont ceux du C , mais tout simplement parceque je prefere programmer en C ; mais un projet SDL est en C++. Les librairies du C marchent quand meme. D'habitude je rassemble mes entetes dans un seul fichier.h mais j'ai essayer de les mettre dans tous les fichiers pour régler le problème, sans succès , évidemment.
Et voici les sources : le main
Ensuite fonctions.cpp
#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL_image.h>
#include <iostream>
#include "fonctions.h"
/*Suivant l'architecture de la machine, deux manières d'enregistrer des données en mémoire*/
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
#define MASQUE_ROUGE 0xff000000
#define MASQUE_VERT 0x00ff0000
#define MASQUE_BLEU 0x0000ff00
#define MASQUE_ALPHA 0x000000ff
#else
#define MASQUE_ROUGE 0x000000ff
#define MASQUE_VERT 0x0000ff00
#define MASQUE_BLEU 0x00ff0000
#define MASQUE_ALPHA 0xff000000
#endif
#define PORT 80
Uint32 GetPix(SDL_Surface *img,int x,int y)
{
int nbOctetsParPixel = img->format->BytesPerPixel;
Uint8 *p = (Uint8 *)img->pixels + y * img->pitch + x * nbOctetsParPixel;
/*Gestion différente suivant le nombre d'octets par pixel de l'image*/
switch(nbOctetsParPixel)
{
case 1:
return *p;
case 2:
return *(Uint16 *)p;
case 3:
/*Suivant l'architecture de la machine*/
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
return p[0] << 16 | p[1] << 8 | p[2];
else
return p[0] | p[1] << 8 | p[2] << 16;
case 4:
return *(Uint32 *)p;
/*Ne devrait pas arriver, mais évite les erreurs*/
default:
return 0;
}
}
void SetPix(SDL_Surface *img,int x,int y,Uint32 pixel)
{
int nbOctetsParPixel = img->format->BytesPerPixel;
/*Ici p est l'adresse du pixel que l'on veut modifier*/
/*surface->pixels contient l'adresse du premier pixel de l'image*/
Uint8 *p = (Uint8 *)img->pixels + y * img->pitch + x * nbOctetsParPixel;
/*Gestion différente suivant le nombre d'octets par pixel de l'image*/
switch(nbOctetsParPixel)
{
case 1:
*p = pixel;
break;
case 2:
*(Uint16 *)p = pixel;
break;
case 3:
/*Suivant l'architecture de la machine*/
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
{
p[0] = (pixel >> 16) & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = pixel & 0xff;
}
else
{
p[0] = pixel & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = (pixel >> 16) & 0xff;
}
break;
case 4:
*(Uint32 *)p = pixel;
break;
}
}
void insec(char *epreuve_ptr) // Cette fonction sépare les 3 images et les enregistre dans des fichiers png
{
int i = 236; /* variable pour recupérer les caractères d'epreuve_ptr. i=236 pour sauter les entetes http */
int c=1; /* variable permettant de savaoir quel image (tableau de char) récupérer. Si c=1 -> img1_char, c=2 -> img2, c=3 -> img3 */
int temp = 0; /* variable permettant de serepérer dans le tableau de caractères epreuve_ptr */
FILE *img1_file;
FILE *img2_file;
FILE *img3_file;
img1_file = fopen("img1.png","wb");
img2_file = fopen("img2.png","wb");
img3_file = fopen("img3.png","wb");
char img1_char[9999]="";
char img2_char[9999]="";
char img3_char[9999]="";
for(;i<6000;i++)
{
if(epreuve_ptr[i]=='I'&&epreuve_ptr[i+1]=='E'&&epreuve_ptr[i+2]=='N'&&c==1)
{
for(int p=0;p<i+8-236;p++) // tant que p<i+8 car a partir du "I" de "IEND" il y a 8 caractères avant la fin du png. -236 car on doit ignorer l'entete http
{
img1_char[p]=epreuve_ptr[p+236]; // On extrait la premiere image
}
c=2;
for(;epreuve_ptr[i]!='0/00';i++){} // epreuve_ptr[i] représente maintenant le premier cractère de l'image suivante (ici l'img2)
temp=i; // on copie dans temp i pour pouvoir reutiliser i dans la boucle et garder en mémoire le début du fichier png.
}
if(epreuve_ptr[i]=='I'&&epreuve_ptr[i+1]=='E'&&epreuve_ptr[i+2]=='N'&&c==2)
{
for(int p=0;p<i-temp+8;p++)
{
img2_char[p]=epreuve_ptr[temp+p]; // On extrait la seconde
}
c=3;
for(;epreuve_ptr[i]!='0/00';i++){}
temp=i;
}
if(epreuve_ptr[i]=='I'&&epreuve_ptr[i+1]=='E'&&epreuve_ptr[i+2]=='N'&&c==3)
{
for(int p=0;p<i-temp+8;p++)
{
img3_char[p]=epreuve_ptr[temp+p]; // On extrait la troisieme
}
}
}
for(int i=0;i<6000;i++)
{
fprintf(img1_file,"%c",img1_char[i]); // maintenant on enregistre
}
for(int i=0;i<2000;i++)
{
fprintf(img2_file,"%c",img2_char[i]);
}
for(int i=0;i<2000;i++)
{
fprintf(img3_file,"%c",img3_char[i]);
}
fclose(img1_file); // C'est finit on ferme les flux
fclose(img2_file);
fclose(img3_file);
}
void organize(SDL_Surface *img) // fonction reorganisant les pixels de l'image
{
SDL_Surface *img1 = NULL, *img2 = NULL, *img3 = NULL, *temp = NULL;
Uint32 pixel;
Uint8 r,v,b,a;
Uint8 aj_r,aj_v,aj_b;
Uint8 temp_r,temp_v,temp_b;
temp = SDL_CreateRGBSurface(0, 330, 55, 32,MASQUE_ROUGE, MASQUE_VERT, MASQUE_BLEU, MASQUE_ALPHA); // On creer la surface RGB de la surface provisoire
int img1_x=0; // variable permettant de naviguer dans les abscisses (330 pixels max)
int img1_y=0; // variable permettant de naviguer dans les ordonnées (55 pixels max)
int img2_y=0; // (55 pix max)
int img3_x=0; // (330 pix max)
int temp_x=0;
int temp_y=0;
img1 = IMG_Load("img1.png");
img2 = IMG_Load("img2.png");
img3 = IMG_Load("img3.png");
for(;img3_x<330;img3_x++)
{
pixel = GetPix(img3,img3_x,0);
SDL_GetRGBA(pixel, img3->format, &aj_r, &aj_v, &aj_b, &a); // On récupère les valeurs d'ajout
for(;img1_y<55;img1_y++)
{
pixel = GetPix(img1,img3_x,img1_y);
SDL_GetRGBA(pixel, img1->format, &r,&v,&b,&a); // On récupère les valeurs rgba de l'img1
/* On commence par replacer la valeur de la composante rouge dans temp a partir de img1, on procède ainsi :
-On récupère le pixel correspondant dans temp.png.
-On insère la valeur de r dans temp_r
-On reinjecte le pixel
..............................................................
............................................................*/
pixel = GetPix(temp,img3_x,modulo(img1_y-aj_r,54));
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_r=r;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(temp,img3_x,modulo(img1_y-aj_r,54),pixel);
/* On procède de meme avec la composante verte */
pixel = GetPix(temp,img3_x,modulo(img1_y-aj_v,54));
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_v=v;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(temp,img3_x,modulo(img1_y-aj_v,54),pixel);
/* Et encore de meme avec la composante bleue */
pixel = GetPix(temp,img3_x,modulo(img1_y-aj_b,54));
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_b=b;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(temp,img3_x,modulo(img1_y-aj_b,54),pixel);
}
}
// maintenant on fait de meme en prenant l'img2 , donc un peu different
for(;img2_y<55;img2_y++)
{
pixel = GetPix(img2,0,img2_y);
SDL_GetRGBA(pixel, img3->format, &aj_r, &aj_v, &aj_b, &a); // On récupère les valeurs d'ajout
for(;temp_x<330;temp_x++)
{
pixel = GetPix(temp,temp_x,img2_y);
SDL_GetRGBA(pixel, temp->format, &r,&v,&b,&a); // On récupère les valeurs rgba de l'img1
/* On commence par replacer la valeur de la composante rouge dans temp a partir de img1, on procède ainsi :
-On récupère le pixel correspondant dans temp.png.
-On insère la valeur de r dans temp_r
-On reinjecte le pixel
..............................................................
............................................................*/
pixel = GetPix(img,modulo(temp_x-aj_r,329),img2_y);
SDL_GetRGBA(pixel, img->format, &temp_r,&temp_v,&temp_b,&a);
temp_r=r;
pixel=SDL_MapRGBA(img->format, temp_r, temp_v, temp_b, a);
SetPix(img,modulo(temp_x-aj_r,329),img2_y,pixel);
/* On procède de meme avec la composante verte */
pixel = GetPix(img,modulo(temp_x-aj_v,329),img2_y);
SDL_GetRGBA(pixel, img->format, &temp_r,&temp_v,&temp_b,&a);
temp_v=v;
pixel=SDL_MapRGBA(img->format, temp_r, temp_v, temp_b, a);
SetPix(img,modulo(temp_x-aj_v,329),img2_y,pixel);
/* Et encore de meme avec la composante bleue */
pixel = GetPix(img,modulo(temp_x-aj_b,329),img2_y);
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_b=b;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(img,modulo(temp_x-aj_b,329),img2_y,pixel);
}
}
}
int modulo(int val,int modul) // Fonction permettant de faire tenir la valeur dans l'intervalle des pixels
{
while(val<0)
{
val+=modul;
}
while(val>modul)
{
val-=modul;
}
return val;
}
Et voici les sources : le main
#include <ws2tcpip.h>
#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL_image.h>
#include "fonctions.h"
#include <nspapi.h>
#define PORT 80
int initWSA() // On initialise
{
WSADATA wsa;
int error = WSAStartup(MAKEWORD(2,0),&wsa);
if (error <0)
{
return -1;
}
else{
return 1;
}
}
int main ( int argc, char** argv )
{
initWSA();
SOCKET sock =socket(AF_INET,SOCK_STREAM,0); // BEGIN
struct sockaddr_in sin = {0}; //
struct hostent *hostname = gethostbyname("www.newbiecontest.org");
sin.sin_addr = *(IN_ADDR*) hostname->h_addr; // On initialise les paramètres pour le socket
sin.sin_port = htons(80); //
sin.sin_family = AF_INET; // END
FILE *output;
output = fopen("output.txt","w");
char get_prog[]="GET /epreuves/prog/prog11.php HTTP/1.1\r\nHost: www.newbiecontest.org\r\nCookie: SMFCookie89=a%3A4%3A%7Bi%3A0%3Bs%3A5%3A%2260433%22%3Bi%3A1%3Bs%3A40%3A%22d2f7cfb9a7f02d3b3ffd559ab91122634d22f98d%22%3Bi%3A2%3Bi%3A1598521102%3Bi%3A3%3Bi%3A0%3B%7D; PHPSESSID=c0f0bcc73ab8597e24ad1110bf908ab9; admin=0\r\n\r\n";
char epreuve[9999]="";
SDL_Surface *img = NULL;
img = SDL_CreateRGBSurface(0, 330, 55, 32,rmask, gmask, bmask, amask);
SDL_Rect positionFond;
positionFond.x = 0;
positionFond.y = 0;
connect(sock,(SOCKADDR *)&sin, sizeof(SOCKADDR));
send(sock,get_prog,strlen(get_prog),0);
recv(sock,epreuve,sizeof epreuve -1,0);
insec(epreuve); // créer les fichiers img1.png , img2.png et img3.png
organize(img); // remplit la surface img, en réorgarnisant les pixels de l'image de l'épreuve
WSACleanup();
return 0;
}
Ensuite fonctions.cpp
#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <SDL/SDL.h>
#include <SDL_image.h>
#include <iostream>
#include "fonctions.h"
/*Suivant l'architecture de la machine, deux manières d'enregistrer des données en mémoire*/
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
#define MASQUE_ROUGE 0xff000000
#define MASQUE_VERT 0x00ff0000
#define MASQUE_BLEU 0x0000ff00
#define MASQUE_ALPHA 0x000000ff
#else
#define MASQUE_ROUGE 0x000000ff
#define MASQUE_VERT 0x0000ff00
#define MASQUE_BLEU 0x00ff0000
#define MASQUE_ALPHA 0xff000000
#endif
#define PORT 80
Uint32 GetPix(SDL_Surface *img,int x,int y)
{
int nbOctetsParPixel = img->format->BytesPerPixel;
Uint8 *p = (Uint8 *)img->pixels + y * img->pitch + x * nbOctetsParPixel;
/*Gestion différente suivant le nombre d'octets par pixel de l'image*/
switch(nbOctetsParPixel)
{
case 1:
return *p;
case 2:
return *(Uint16 *)p;
case 3:
/*Suivant l'architecture de la machine*/
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
return p[0] << 16 | p[1] << 8 | p[2];
else
return p[0] | p[1] << 8 | p[2] << 16;
case 4:
return *(Uint32 *)p;
/*Ne devrait pas arriver, mais évite les erreurs*/
default:
return 0;
}
}
void SetPix(SDL_Surface *img,int x,int y,Uint32 pixel)
{
int nbOctetsParPixel = img->format->BytesPerPixel;
/*Ici p est l'adresse du pixel que l'on veut modifier*/
/*surface->pixels contient l'adresse du premier pixel de l'image*/
Uint8 *p = (Uint8 *)img->pixels + y * img->pitch + x * nbOctetsParPixel;
/*Gestion différente suivant le nombre d'octets par pixel de l'image*/
switch(nbOctetsParPixel)
{
case 1:
*p = pixel;
break;
case 2:
*(Uint16 *)p = pixel;
break;
case 3:
/*Suivant l'architecture de la machine*/
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
{
p[0] = (pixel >> 16) & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = pixel & 0xff;
}
else
{
p[0] = pixel & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = (pixel >> 16) & 0xff;
}
break;
case 4:
*(Uint32 *)p = pixel;
break;
}
}
void insec(char *epreuve_ptr) // Cette fonction sépare les 3 images et les enregistre dans des fichiers png
{
int i = 236; /* variable pour recupérer les caractères d'epreuve_ptr. i=236 pour sauter les entetes http */
int c=1; /* variable permettant de savaoir quel image (tableau de char) récupérer. Si c=1 -> img1_char, c=2 -> img2, c=3 -> img3 */
int temp = 0; /* variable permettant de serepérer dans le tableau de caractères epreuve_ptr */
FILE *img1_file;
FILE *img2_file;
FILE *img3_file;
img1_file = fopen("img1.png","wb");
img2_file = fopen("img2.png","wb");
img3_file = fopen("img3.png","wb");
char img1_char[9999]="";
char img2_char[9999]="";
char img3_char[9999]="";
for(;i<6000;i++)
{
if(epreuve_ptr[i]=='I'&&epreuve_ptr[i+1]=='E'&&epreuve_ptr[i+2]=='N'&&c==1)
{
for(int p=0;p<i+8-236;p++) // tant que p<i+8 car a partir du "I" de "IEND" il y a 8 caractères avant la fin du png. -236 car on doit ignorer l'entete http
{
img1_char[p]=epreuve_ptr[p+236]; // On extrait la premiere image
}
c=2;
for(;epreuve_ptr[i]!='0/00';i++){} // epreuve_ptr[i] représente maintenant le premier cractère de l'image suivante (ici l'img2)
temp=i; // on copie dans temp i pour pouvoir reutiliser i dans la boucle et garder en mémoire le début du fichier png.
}
if(epreuve_ptr[i]=='I'&&epreuve_ptr[i+1]=='E'&&epreuve_ptr[i+2]=='N'&&c==2)
{
for(int p=0;p<i-temp+8;p++)
{
img2_char[p]=epreuve_ptr[temp+p]; // On extrait la seconde
}
c=3;
for(;epreuve_ptr[i]!='0/00';i++){}
temp=i;
}
if(epreuve_ptr[i]=='I'&&epreuve_ptr[i+1]=='E'&&epreuve_ptr[i+2]=='N'&&c==3)
{
for(int p=0;p<i-temp+8;p++)
{
img3_char[p]=epreuve_ptr[temp+p]; // On extrait la troisieme
}
}
}
for(int i=0;i<6000;i++)
{
fprintf(img1_file,"%c",img1_char[i]); // maintenant on enregistre
}
for(int i=0;i<2000;i++)
{
fprintf(img2_file,"%c",img2_char[i]);
}
for(int i=0;i<2000;i++)
{
fprintf(img3_file,"%c",img3_char[i]);
}
fclose(img1_file); // C'est finit on ferme les flux
fclose(img2_file);
fclose(img3_file);
}
void organize(SDL_Surface *img) // fonction reorganisant les pixels de l'image
{
SDL_Surface *img1 = NULL, *img2 = NULL, *img3 = NULL, *temp = NULL;
Uint32 pixel;
Uint8 r,v,b,a;
Uint8 aj_r,aj_v,aj_b;
Uint8 temp_r,temp_v,temp_b;
temp = SDL_CreateRGBSurface(0, 330, 55, 32,MASQUE_ROUGE, MASQUE_VERT, MASQUE_BLEU, MASQUE_ALPHA); // On creer la surface RGB de la surface provisoire
int img1_x=0; // variable permettant de naviguer dans les abscisses (330 pixels max)
int img1_y=0; // variable permettant de naviguer dans les ordonnées (55 pixels max)
int img2_y=0; // (55 pix max)
int img3_x=0; // (330 pix max)
int temp_x=0;
int temp_y=0;
img1 = IMG_Load("img1.png");
img2 = IMG_Load("img2.png");
img3 = IMG_Load("img3.png");
for(;img3_x<330;img3_x++)
{
pixel = GetPix(img3,img3_x,0);
SDL_GetRGBA(pixel, img3->format, &aj_r, &aj_v, &aj_b, &a); // On récupère les valeurs d'ajout
for(;img1_y<55;img1_y++)
{
pixel = GetPix(img1,img3_x,img1_y);
SDL_GetRGBA(pixel, img1->format, &r,&v,&b,&a); // On récupère les valeurs rgba de l'img1
/* On commence par replacer la valeur de la composante rouge dans temp a partir de img1, on procède ainsi :
-On récupère le pixel correspondant dans temp.png.
-On insère la valeur de r dans temp_r
-On reinjecte le pixel
..............................................................
............................................................*/
pixel = GetPix(temp,img3_x,modulo(img1_y-aj_r,54));
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_r=r;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(temp,img3_x,modulo(img1_y-aj_r,54),pixel);
/* On procède de meme avec la composante verte */
pixel = GetPix(temp,img3_x,modulo(img1_y-aj_v,54));
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_v=v;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(temp,img3_x,modulo(img1_y-aj_v,54),pixel);
/* Et encore de meme avec la composante bleue */
pixel = GetPix(temp,img3_x,modulo(img1_y-aj_b,54));
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_b=b;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(temp,img3_x,modulo(img1_y-aj_b,54),pixel);
}
}
// maintenant on fait de meme en prenant l'img2 , donc un peu different
for(;img2_y<55;img2_y++)
{
pixel = GetPix(img2,0,img2_y);
SDL_GetRGBA(pixel, img3->format, &aj_r, &aj_v, &aj_b, &a); // On récupère les valeurs d'ajout
for(;temp_x<330;temp_x++)
{
pixel = GetPix(temp,temp_x,img2_y);
SDL_GetRGBA(pixel, temp->format, &r,&v,&b,&a); // On récupère les valeurs rgba de l'img1
/* On commence par replacer la valeur de la composante rouge dans temp a partir de img1, on procède ainsi :
-On récupère le pixel correspondant dans temp.png.
-On insère la valeur de r dans temp_r
-On reinjecte le pixel
..............................................................
............................................................*/
pixel = GetPix(img,modulo(temp_x-aj_r,329),img2_y);
SDL_GetRGBA(pixel, img->format, &temp_r,&temp_v,&temp_b,&a);
temp_r=r;
pixel=SDL_MapRGBA(img->format, temp_r, temp_v, temp_b, a);
SetPix(img,modulo(temp_x-aj_r,329),img2_y,pixel);
/* On procède de meme avec la composante verte */
pixel = GetPix(img,modulo(temp_x-aj_v,329),img2_y);
SDL_GetRGBA(pixel, img->format, &temp_r,&temp_v,&temp_b,&a);
temp_v=v;
pixel=SDL_MapRGBA(img->format, temp_r, temp_v, temp_b, a);
SetPix(img,modulo(temp_x-aj_v,329),img2_y,pixel);
/* Et encore de meme avec la composante bleue */
pixel = GetPix(img,modulo(temp_x-aj_b,329),img2_y);
SDL_GetRGBA(pixel, temp->format, &temp_r,&temp_v,&temp_b,&a);
temp_b=b;
pixel=SDL_MapRGBA(temp->format, temp_r, temp_v, temp_b, a);
SetPix(img,modulo(temp_x-aj_b,329),img2_y,pixel);
}
}
}
int modulo(int val,int modul) // Fonction permettant de faire tenir la valeur dans l'intervalle des pixels
{
while(val<0)
{
val+=modul;
}
while(val>modul)
{
val-=modul;
}
return val;
}
0cTeT
Messages postés
39
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
213
1 oct. 2014 à 23:01
1 oct. 2014 à 23:01
désolé c'es un peu long... Si possible essaie de compiler ca, le code a peut etre des erreurs , mais elles ne m'interressent pas pour l'instant, je ne crois pas que les erreurs citées plus haut soient de ma faute ...
Bonne soiree
Bonne soiree
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
Modifié par sambia39 le 6/10/2014 à 10:42
Modifié par sambia39 le 6/10/2014 à 10:42
Bonjour
J'ai essayé de repartir sur la base de tes sources pour faire ce bout de code et ceci dit chez moi ça compile c'est déjà ça . Quant à tes erreurs cela vient du fait que tu utilises
Toute connaissance est une réponse à une question.
J'ai essayé de repartir sur la base de tes sources pour faire ce bout de code et ceci dit chez moi ça compile c'est déjà ça . Quant à tes erreurs cela vient du fait que tu utilises
#include <winsock2.h>sans pour autant le lier à ton projet de développement ( c'est à dire
#pragma comment(lib, "ws2_32.lib")) car, c'est de cette manière qu'il faut utiliser les sockets de Windows. Sur certaines choses tu te compliques la vie alors qu'il y a plus simple à faire pour le reste je verrais ça plus tard à bientôt
//Bibliothèque C++ & Windows #include <iostream> #include <winsock2.h> //Linker #pragma comment(lib, "ws2_32.lib") //Define #define PORT 80 #define BUFF 1024 #define WEB "www.newbiecontest.org" /*** * Programme Principale ***/ int main( int argc, char **argv ){ //Variables SOCKET Sck; SOCKADDR_IN Srv; WSADATA WSAData; //Initialisation WSAStartup( MAKEWORD( 2, 0 ), &WSAData ); //Configuration de la socket Sck = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if( Sck == INVALID_SOCKET ){ std::cerr<< "Erreur Socket" <<std::endl; getchar(); exit( 1 ); } //Configuration serveur memset( &Srv, 0, sizeof(SOCKADDR_IN) ); (&Srv)->sin_family = AF_INET; (&Srv)->sin_addr.s_addr = inet_addr( WEB ); (&Srv)->sin_port = htons( PORT ); //Connexion au serveur auto ret = connect( Sck, (SOCKADDR*)&Srv, sizeof(Srv) ); if( ret == SOCKET_ERROR ){ std::cerr << "Erreur de connexion au serveur\t: " << WEB << std::endl; getchar(); closesocket( Sck ); exit( 1 ); } //Aquisition & Envoie des donnée char *pData = (char*)calloc( BUFF, sizeof(char) ); pData ="GET /epreuves/prog/prog11.php HTTP/1.1\r\nHost: www.newbiecontest.org\r\nCookie: SMFCookie89=a%3A4%3A%7Bi%3A0%3Bs%3A5%3A%2260433%22%3Bi%3A1%3Bs%3A40%3A%22d2f7cfb9a7f02d3b3ffd559ab91122634d22f98d%22%3Bi%3A2%3Bi%3A1598521102%3Bi%3A3%3Bi%3A0%3B%7D; PHPSESSID=c0f0bcc73ab8597e24ad1110bf908ab9; admin=0\r\n\r\n"; //Envoie de la requête && Reset Data send( Sck, pData, sizeof( pData ), 0 ); memset( pData, 0, sizeof( pData ) ); //Aquisition de la response recv( Sck, pData, sizeof(pData), 0 ); //Affichage du résultat if( pData != NULL ){ std::cout << pData << std::endl; getchar(); } std::cout << "Aucune information fournis par le serveur" << WEB << std::endl; //Close de la Socket free( pData ); closesocket( Sck ); WSACleanup(); return ( 0 ); }
Toute connaissance est une réponse à une question.
0cTeT
Messages postés
39
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
213
11 oct. 2014 à 17:23
11 oct. 2014 à 17:23
Merci encore pour ta réponse ! Malheureusement cette ligne :#pragma comment(lib, "ws2_32.lib")
ne change rien , de toute facon je linkais deja a partir de compiler->settings. Pöur le programme , il n'est pas du tout au point , il y a des boucles a rajouter des crochets a enlever ... Je n'ai plus le probleme , j'ai juste recreer un projet et fais un copier-coller de toutes les sources, et ca marche ... ca marche mais aucune explication valable, merci quand meme !
ne change rien , de toute facon je linkais deja a partir de compiler->settings. Pöur le programme , il n'est pas du tout au point , il y a des boucles a rajouter des crochets a enlever ... Je n'ai plus le probleme , j'ai juste recreer un projet et fais un copier-coller de toutes les sources, et ca marche ... ca marche mais aucune explication valable, merci quand meme !