home *** CD-ROM | disk | FTP | other *** search
- #import <stdio.h>
- #import "ppm.h"
- #import "save.h"
-
- int ppmwrite(FILE *fp, commonInfo *cinf, unsigned char **planes)
- {
- int max = 255, sft = 0, n;
- int r, g, b;
-
- switch (cinf->bits) {
- case 1: max = 1; sft = 7; break;
- case 2: max = 3; sft = 6; break;
- case 4: max = 15; sft = 4; break;
- case 8: max = 255; sft = 0; break;
- }
-
- if (cinf->numcolors > 1) { /* color */
- /* PPM Binary */
- fprintf(fp, "P6\n%d %d %d\n", cinf->width, cinf->height, max);
- n = cinf->width * cinf->height;
- if (sft)
- while (n-- > 0) {
- (void) getPixel(&r, &g, &b);
- putc(r >> sft, fp);
- putc(g >> sft, fp);
- putc(b >> sft, fp);
- }
- else
- while (n-- > 0) {
- (void) getPixel(&r, &g, &b);
- putc(r, fp);
- putc(g, fp);
- putc(b, fp);
- }
- }else if (max == 1) { /* Bi-Level */
- /* PBM Binary */
- int x = (cinf->width + 7) >> 3;
- int y = cinf->height;
- unsigned char *p = planes[0];
- fprintf(fp, "P4\n%d %d\n", cinf->width, cinf->height);
- while (y-- > 0) {
- for (n = 0; n < x; n++)
- putc(p[n], fp);
- p += cinf->xbytes;
- }
- }else { /* Gray */
- /* PGM Binary */
- fprintf(fp, "P5\n%d %d %d\n", cinf->width, cinf->height, max);
- n = cinf->width * cinf->height;
- if (sft)
- while (n-- > 0) {
- (void) getPixel(&r, &g, &b);
- putc(r >> sft, fp);
- }
- else
- while (n-- > 0) {
- (void) getPixel(&r, &g, &b);
- putc(r, fp);
- }
- }
- return 0;
- }
-
-