Номын санд явж байсан манай сургуулийн нэг Камбуж залуу нэг даалгавар хараадхаа гэхээр нь очоод харсан сонирхолтой санагдаад хийж үзлээ.
ppm төрлийн зургийн файл нь ASCII форматаар илэрхийлэгддэг юм байна.
Жишээ нь доорх шиг ppm форматтай зургийг текст эдитор дээр нээвэл хажуудахь шиг харагдана.
Файлыг эндээс татаж авч болно.
ASCII кодыг тайлбарлавал:
P3 # форматын төрөл 150 150 # зургийн өргөн, урт 255 # хэрэглэгдсэн максимум өнгө 176 # эхний цэгийн RGB кодын Red 158 # эхний цэгийн RGB кодын Green 158 # эхний цэгийн RGB кодын Blue 172 # хоёр дахь цэгийн RGB кодын Red 152 # хоёр дахь цэгийн RGB кодын Green 153 # хоёр дахь цэгийн RGB кодын Blue
3 дахь мөрөөс хойш 150x150x3 мөр байна. Учир нь 3 тоо нэг цэгийн өнгийг илэрхийлж байна.
Тэгээд код бичиж үзлээ, энгийн мөртлөө их таалагдлаа. Програмыг ажиллуулахад доорх дөрвөн зураг ppm форматаар үүсэх юм.
За ингээд эцэст нь кодоо хавсаргая:
#include#include int main() { FILE * input; FILE * avatar; FILE * negative; FILE * small; FILE * mirror; int i, m; int width, height, max; char fname[20]; printf("Enter the name of the file: "); scanf("%20s", &fname); input = fopen(fname, "r"); avatar = fopen("avatar.ppm", "w"); negative = fopen("negative.ppm", "w"); small = fopen("small.ppm", "w"); mirror = fopen("mirror.ppm", "w"); if (input == NULL) { printf("ERROR: The file can not be found!\n"); return -1; } fscanf(input, "P3\n%d %d\n%d", &width, &height, &max); fprintf(avatar, "P3\n%d %d\n%d\n", width, height, max); fprintf(negative, "P3\n%d %d\n%d\n", width, height, max); fprintf(small, "P3\n%d %d\n%d\n", width/2, height/2, max); fprintf(mirror, "P3\n%d %d\n%d\n", width, height, max); int dim = width*height; int temp[dim][3]; for (i=0;i < dim;i++) { fscanf(input, "%d %d %d ", &temp[i][0], &temp[i][1], &temp[i][2]); fprintf(avatar, "%d %d %d ", temp[i][2], temp[i][1], temp[i][0]); fprintf(negative, "%d %d %d ", max-temp[i][0], max-temp[i][1], max-temp[i][2]); if ((i/width)%2==0) { if (i%2==0) fprintf(small, "%d %d %d ", temp[i][0], temp[i][1], temp[i][2]); } } for (i=0;i < dim;i++) { m = (i/width)*width+width-i%width-1; fprintf(mirror, "%d %d %d ", temp[m][0], temp[m][1], temp[m][2]); } fclose(input); fclose(avatar); fclose(negative); fclose(small); fclose(mirror); return 0; }
Дажгүй цэгцтэй код боллоо. Зураг том бол RAM-д их зай эзлэх нь дээ. :(
No comments:
Post a Comment