P6lecture des images au format PPM
P6 indique qu'il est une image PPM. Les deux champs suivants sont la largeur et la hauteur de l'image. Le dernier champ donne la valeur de pixel maximale. A la fin de l'en-tête est un \ n puis les données de pixels binaires. L'image est en couleur donc il y a trois octets (rouge, vert, bleu). Le but de ma fonction readPPM est de retourner les données de pixels dans un tableau unidimensionnel de caractères non signés, plus la largeur et la hauteur de l'image. Le but de ma fonction writePPM (je n'ai encore rien fait pour cette fonction) est d'écrire l'image au format PPM dans un fichier vide à partir des informations fournies par ma fonction readPPM. Je ne suis toujours pas sûr de savoir comment faire fonctionner ce programme, donc je ne stocke pas le 650 en largeur et 652 en hauteur. Je vais m'inquiéter à ce sujet une fois que je pourrai lire et écrire les fichiers texte.
Mise à jour: J'ai réussi à stocker l'en-tête (P6, 650, 652 et 255)) dans leurs bonnes variables (je sais parce que j'ai essayé d'imprimer leurs valeurs et ils sont sortis à droite). Ma sortie est montrée ci-dessous. Je me demandais ce que ces caractères absurdes en dessous du maximum étaient. Sont-ce les données de pixel binaire? Si oui, alors j'ai juste besoin d'écrire ma fonction writePPM.
sortie: PSix: P6
Largeur: 650
Hauteur: 652
maximale:?????? 255
ɡ ƞ ɢ ˤ ɢ de S? ĝ? Ǡ? ʤ? ɣ? ɡ? ɡ? ǟ? Ĝ? ŝ? Ƞ? ȡ? ʣ? ʣ? ȡ? ʣ? ʣ? ȡ? Ŝ? Ŝ? Ȟ? ʠ? ̤? ƞ? Ơ? ʤ? ʦ? ʦ? ɧ? Ƥ? Ǥ? Ȧ? Ɩ? ʪ? ʫ? ʫ? ʪ? ʨ? ɤ? Ǡ? ʢ? ̤? ȡ? ȡ? ʥ? Ɥ? ʧ? Ģ? Ǥ? Ƥ? Ģ? Ƥ? ʨ? ʨ? ɧ? ʨ? ɧ? ɧ? ͨ? Ϧ? ʟ? ˠ? Х? Φ? ͥ? ˣ? Ǟ? ʦ? ʦ? Ɥ? Ġ ??? ?????????? ?? ˭? ū ?????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? յ? Ǫ? ٿ? һ ???? ư? ɳ? ɳ? ɱ? ɱ? ˰? ˮ? ɪ? Ȧ? ͫ? ֵ? ұ? Ť? ¡? ʩ? Ӳ? Ϯ? ͫ? ϭ ? ѯ? ѯ? Ϭ? ̭? ˰? Ͷ? ͵? ˳? ʱ? ͵? ˳? ʱ? Ǯ? ȯ? ε? ӷ? ϳ? ̯? ɬ? ̫? ͬ? ͭ? ˪? ΰ? ͮ? ί? Ӵ? Ӷ ? ς? ˮ? ɬ? ʭ? Ѵ? ҵ? г? ς? ˮ? ȫ? ɬ? ǩ? ρ? ρ? в? в? ʬ? ˭? ̭? ί? ͮ? ͮ? ͮ? ί? ˬ? ȩ ? ʫ? ͮ? ղ? ү? Ӳ? ֵ? Ҵ? ѳ? ς? ȭ? ȭ? ˰? ˮ? ˮ? ˰? ˮ? ˮ? ͯ? ̮? ̬? ͯ? ˮ?? ˲? ȯ? ƭ? Ư? Ů ? ®? ¯ ???????????????????????? é? É? Ū? ¨ ???????????????????????????????????????????????????? ?? ȫ? ɫ? ̭? ˭? ʬ? ʬ? ɫ? ʬ? ʮ? ˯? ˯? ˯? ˯? Ȭ? Ȫ? ɫ? ̮? ͯ? ρ? ѳ? ӵ? Ѵ? б? κ? ϭ? ά? Ѯ? Ա? Ӱ? Э? Ϭ? ү? ү? Э? ά? ѯ? וי? ӭ? ϩ? ͧ? ϧ? ѩ? Ԭ? ذ? խ? ѩ? Ϧ? Ϧ? Ч? ҩ? ҩ? ҩ? ת? ث? ? خ? ׯ? 7? Կ? Կ? Ԭ? Խ? ج? ج? ܬ? ߰? 㳩 䴨 峨 ݫ? 7? ެ 䲧 峨 峨 䲧 س ج ج جمي ??? ????????????????????????????? ± ???? ð ???????? ???????????????????????????????? æ? ũ? ç? é? Ī ? ë ??????? £? Ʀ? Ʀ? ƥ? Ť ? Ť? Ƥ? ɧ? ʨ? ͫ? Ά? ʩ? Ť??? Ţ? Ť? Ť? Ƨ? ˬ? ɭ? ????????????????? ????????????? ç ????????????????????????????????? ???????????????????????????????????????????? ???????????????????????? ?????????? ?????? ????????????????????????????????????? ?????? ??? ??????? 겱 겱 겳 겳 뵫 뵫 뵫 뵫 뵫 뵫 뵫 뵫 뵫 뵫 뵫 뵫 뵫 뵫 㳩 ᱧ 㳧 嵩 㵨 ᳦᳤ჵ 乩 缬 轭 轭 缬 ߴ? 0? ߴ? 幬
main.cc
int main() {
char fileName[50] = "binary_pixels.txt";
int width = 0; // width of the image
int height = 0; // heigt of the image
int size = 128; // size of the array
// read the PPM file and store its contents inside an array and return
// the pointer to that array to pixelArray
unsigned char* pixelArray[size] = readPPM(fileName, &width, &height);
// print the contents of the array
for (int i = 0; i < 128; i++) {
printf("%s\n", pixelArray[i]);
} // end of for loop
} // end of main
readPPM.cc
unsigned char readPPM(const char* fileName, char* pSix, int* width,
int* height, int* maximum) {
// open the file to read just the header reading
FILE* fr = fopen(fileName, "r");
// formatted read of header
fscanf(fr, "%s", pSix);
// check to see if it's a PPM image file
if (strncmp(pSix, "p6" , 10) != 0) {
printf("They are not the same\n");
} else {
printf("They are the same\n");
}
// read the rest of header
fscanf(fr, "%d\n %d\n", width, height);
fscanf(fr, "%d\n", maximum);
// check to see if they were stored properly
printf("PSix: %s\n", pSix);
printf("Width: %d\n", *width);
printf("Height: %d\n", *height);
printf("maximum: %d\n", *maximum);
// allocate array for pixels
unsigned char* pixels = new unsigned char[width * height];
// unformatted read of binary pixel data
while (fread(pixels, sizeof(pixel), 128, fr)) {
printf("%s", pixels);
} // end of for loop
// close file
fclose(fr);
// return the array
return pixels;
} // end of readPPM
Si votre programme doit être un code c propre, vous ne pouvez pas utiliser 'new'. En C c'est fait avec 'malloc()' (include 'stdlib.h'). – Scheff
Le type de 'pixelArray' dans' main' est incorrect. Il doit être 'unsigned char * pixelArray' (sans [size]'). – Scheff
J'ai réussi à stocker l'en-tête (P6, 650, 652 et 255)) dans leurs bonnes variables (je sais parce que j'ai essayé d'imprimer leurs valeurs et ils sont sortis à droite). Ma sortie est montrée ci-dessous. Je me demandais ce que ces caractères absurdes en dessous du maximum étaient. Sont-ce les données de pixel binaire? Si oui, alors j'ai juste besoin d'écrire ma fonction writePPM. – asilvester635