home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Resource Library: Graphics
/
graphics-16000.iso
/
general
/
convrtrs
/
pbmplus
/
ntpbmsrc.lha
/
netpbm
/
pnm
/
pnmpad.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-06
|
2KB
|
96 lines
/* pnmpad.c - add border to sides of a portable anymap
** AJCD 4/9/90
*/
#include <stdio.h>
#include "pnm.h"
int
main(argc, argv)
int argc;
char *argv[];
{
FILE *ifd;
xel *xelrow, *bgrow, background;
xelval maxval;
int rows, cols, newcols, row, col, format;
int left, right, top, bot, black;
char *usage = "[-white|-black] [-l#] [-r#] [-t#] [-b#] [pnmfile]";
pnm_init( &argc, argv );
black = 1;
left = right = top = bot = 0;
while (argc >= 2 && argv[1][0] == '-') {
if (strcmp(argv[1]+1,"black") == 0) black = 1;
else if (strcmp(argv[1]+1,"white") == 0) black = 0;
else switch (argv[1][1]) {
case 'l':
if ((left = atoi(argv[1]+2)) < 0)
pm_error("left border too small");
break;
case 'r':
if ((right = atoi(argv[1]+2)) < 0)
pm_error("right border too small");
break;
case 'b':
if ((bot = atoi(argv[1]+2)) < 0)
pm_error("bottom border too small");
break;
case 't':
if ((top = atoi(argv[1]+2)) < 0)
pm_error("top border too small");
break;
default:
pm_usage(usage);
}
argc--, argv++;
}
if (argc > 2)
pm_usage(usage);
if (argc == 2)
ifd = pm_openr(argv[1]);
else
ifd = stdin;
pnm_readpnminit(ifd, &cols, &rows, &maxval, &format);
if (black)
background = pnm_blackxel(maxval, format);
else
background = pnm_whitexel(maxval, format);
if (cols == 0 || rows == 0) {
pm_message("empty bitmap");
left = right = bot = top = 0;
}
newcols = cols+left+right;
xelrow = pnm_allocrow(newcols);
bgrow = pnm_allocrow(newcols);
for (col = 0; col < newcols; col++)
xelrow[col] = bgrow[col] = background;
pnm_writepnminit(stdout, newcols, rows+top+bot, maxval, format, 0);
for (row = 0; row < top; row++)
pnm_writepnmrow(stdout, bgrow, newcols, maxval, format, 0);
for (row = 0; row < rows; row++) {
pnm_readpnmrow(ifd, xelrow+left, cols, maxval, format);
pnm_writepnmrow(stdout, xelrow, newcols, maxval, format, 0);
}
for (row = 0; row < bot; row++)
pnm_writepnmrow(stdout, bgrow, newcols, maxval, format, 0);
pm_close(ifd);
exit(0);
}