forked from ArduCAM/MIPI_Camera
-
Notifications
You must be signed in to change notification settings - Fork 0
/
spreadpgm.c
39 lines (31 loc) · 901 Bytes
/
spreadpgm.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* gcc -Wall -Wextra -pedantic spreadpgm.c -o spreadpgm
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(int argc, char *argv[])
{
unsigned char buf[15+640*480],*p,m=0;
int width, height;
double sc;
FILE *src;
assert(argc <= 2 || !"spreadpgm [file.pgm]");
src = (argc == 1 || strcmp(argv[1], "-") == 0) ? stdin : fopen(argv[1], "rb");
assert(1 == fread(buf, 15, 1, src));
assert(2 == sscanf((const char *)buf, "P5\n%d %d\n255\n", &width, &height));
if (height%16)
height += (16-(height%16));
assert(1 == fread(buf+15, width*height, 1, src));
assert(0 == fread(buf, 1, 1, src));
assert(feof(src));
fclose(src);
for(p=buf+15; p<buf+15+width*height; ++p)
if (*p > m)
m = *p;
sc = 254.0 / m;
for(p=buf+15; p<buf+15+width*height; ++p)
*p = sc * *p;
fwrite(buf, 15+width*height, 1, stdout);
return 0;
}