Р6формат изображения Чтение PPM
Р6 указывает на то, что это изображение ЦБК. Следующие два поля - это ширина и высота изображения. Последнее поле дает максимальное значение пикселя. В конце заголовка находится \ n, а затем данные двоичного пикселя. Изображение в цвете, поэтому есть три байта (красный, зеленый, синий). Цель моей функции readPPM - вернуть данные пикселя в одномерный массив без знака, а также ширину и высоту изображения. Цель моей функции writePPM (я еще ничего не сделал для этой функции) - записать изображение формата PPM в пустой файл из данной информации, возвращенной из моей функции readPPM. Я все еще не уверен, как сделать эту программу, поэтому я не хранил 650 в ширину и 652 в высоту. Я буду беспокоиться об этом, когда смогу читать и писать текстовые файлы.
Обновление: Я успешно сохранил заголовок (P6, 650, 652 и 255)) в своих правых переменных (я знаю, потому что я попробовал распечатать их значения, и они вышли правильно). Мой вывод показан ниже. Мне было интересно, что это за бесхитростные персонажи ниже максимума. Являются ли эти данные двоичными пикселями? Если это так, тогда мне просто нужно написать мою функцию writePPM.
Выход: Psix: Р6
Ширина: 650
Высота: 652
максимум:????? 255
ɡ Ƞ ɢ ˤ ɢ с? G? Ǡ? ʤ? ɣ? ɡ? ɡ? ǟ? словар? С? ƞ? ȡ? ʣ? ʣ? ȡ? С? С? Ȟ? ʠ? ̤? ƞ грешных ʤ? ʦ? ʦ? ɧ? ƥ? ǥ? Ȧ? ɩ? ʪ? ʫ? ʫ? ʪ? ʨ? ɤ? Ǡ? ʢ? ̤? ȡ? ȡ? ʥ? ɥ? ʧ? Ģ? ǥ? ƥ? Ģ? ???? ???? ƥ ǥ? ʨ? ɧ? ʨ? ɧ? ɧ? ͨ? Ϧ? ʟ? ˠ? Х? Φ? ͥ? ˣ? Ǟ ?? ò? ʦ? Ɥ? ??? г ?????????? ????? ħ? ˙U ??????? ©? Ǯ ????????????? ǩ? ˭? Ū ?????????????? ??????????? 鴢 紣 㴢 ⳡ ? ܴᷟ? ⺡ 㻢 Ḥ ? ݳ? 1? ܲ? 1? خ? ? ٯ? ֮? ѫ? Ъ? ̨? մ? յ? ǫ? ٿ? һ ???? ˙U? ɳ? ɳ? ɱ? ɱ? ˰? ˮ? ɪ? Ȧ? ͫ? ֵ? ұ? Ť? ¡? ʩ? Ӳ? Ϯ? ͫ? ϭ ? ѯ? ѯ? Ϭ? ̭? ˰? Ͷ? ͵? ˳? ʱ? ǯ? ȯ? ε? ӷ? ϳ? ̯? ɬ? ̫? ͬ? ͭ? ˪? ΰ? ͮ? ί? Ӵ? Ӷ ? ς? ˮ? ɬ? ʭ? Ѵ? ҵ? г? ς? ˮ? ȫ? ɬ? ǩ? ρ? в? ˭? ʬ? ˭? ̭? ί? ͮ? ͮ? ͮ? ί? ˬ? ȩ ? ʫ? ͮ? ղ? ү? Ӳ? ֵ? Ҵ? ѳ? ς? ˮ? ȭ? ˰? ˮ? ˮ? ͯ? ̮? ̬? ͯ? ˮ? ˲? ȯ? ƭ? ˙U? ˙U ? ®? ¯ ????????????????????????????????????? ¨? é? é? ū? ¨ ??????????????????????????????? ī? ī? ī? и? и? ī? ū? ū? é ?? ????? ĭ? ˙U? ® ??????????? © ?????????? ȫ? ȫ? ȫ? ɫ? ̭? ̭? ˭? ʬ? ɫ? ʬ? ʮ? ˯? ˯? ˯? ˯? Ȭ? Ȫ? ɫ? ̮? ͯ? ρ? ѳ? ӵ? Ѵ? б? κ? ϭ? ά? Ѯ? Ա? Ӱ? Э? ϭ? ү? ү? Э? ά? ѯ? וי? ӭ? ϩ? ͧ? ϧ? ѩ? Ԭ? ذ? խ? ѩ? Ϧ? Ϧ? Ч? ҩ? ҩ? ҩ? ת? ث? ? خ? ׯ? ֮? կ? կ? Ԭ? խ? ج? ج? ܬ? ߰? 㳩 䴨 峨 ݫ? 7? ެ? 䲧 峨 䲧 䲧 Ⱗ 䲩 붮? س 국굯 ??????? 걦뱥 جمي ??? ???????????????????????????????????? ± ???? ð ???????? ????????????????????????????????????????? æ? ˙U? ç? é? я ? Мобайл ??????? £? Ʀ? Ʀ? ƥ? Ť ????????? Ť ƥ ɧ ʨ ͫ ά ʩ Т Ч ǩ Ť Ƨ ˬ ɭ |? ?????????????????? ????????????? ç ???????????????????????????????????? ?????????????????????????????????????????????????? ????????????????????????????? ñ? °? ñ î ?????????? ????? ??????????????????? 鲯 豮 汭 尬 䯫 汭 곮췱 洫 ᱧద 嵫 緭 䴪 ᯦᯦ 䲩 洫 鴬 鴬 鴬 국국 贩 춬 ?????? 뵩괪 ??? ??????? ? 겱 ⪭ ???? 겳 ??? 뵫 贩 贩 趫 긭 긭긭 跩 綨 깫 컭궩 糦 뵩뷩 켨컪 鸧 綨 浧 絬 鷮 鷰 峬 洫 ??? 긭 跩 긭캱 캳깲 綯㳩 ᱧ 㳧 嵩 㵨 ᳦᳤ჵ 乩 缬 轭 轭 缬 ߴ? 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
Если ваша программа должна быть чистым кодом c, вы не можете использовать 'new'. В C это делается с помощью 'malloc()' (включая 'stdlib.h'). – Scheff
Тип 'pixelArray' в' main' неверен. Это должно быть 'unsigned char * pixelArray' (без' [size] '). – Scheff
Я успешно сохранил заголовок (P6, 650, 652 и 255)) в своих правых переменных (я знаю, потому что я попробовал распечатать их значения, и они вышли правильно). Мой вывод показан ниже. Мне было интересно, что это за бесхитростные персонажи ниже максимума. Являются ли эти данные двоичными пикселями? Если это так, тогда мне просто нужно написать мою функцию writePPM. – asilvester635