|
|
|
@ -108,7 +108,7 @@ RECENT REVISION HISTORY: |
|
|
|
|
Cass Everitt Ryamond Barbiero github:grim210 |
|
|
|
|
Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw |
|
|
|
|
Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus |
|
|
|
|
Josh Tobin Matthew Gregan github:poppolopoppo |
|
|
|
|
Josh Tobin Simon Breuss Matthew Gregan github:poppolopoppo |
|
|
|
|
Julian Raschke Gregory Mullen Christian Floisand github:darealshinji |
|
|
|
|
Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 |
|
|
|
|
Brad Weinberger Matvey Cherevko [reserved] |
|
|
|
@ -935,6 +935,7 @@ static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); |
|
|
|
|
static int stbi__pnm_test(stbi__context *s); |
|
|
|
|
static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); |
|
|
|
|
static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); |
|
|
|
|
static int stbi__pnm_is16(stbi__context *s); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static |
|
|
|
@ -7322,7 +7323,8 @@ static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req |
|
|
|
|
stbi_uc *out; |
|
|
|
|
STBI_NOTUSED(ri); |
|
|
|
|
|
|
|
|
|
if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n)) |
|
|
|
|
ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); |
|
|
|
|
if (ri->bits_per_channel == 0) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); |
|
|
|
@ -7332,12 +7334,12 @@ static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req |
|
|
|
|
*y = s->img_y; |
|
|
|
|
if (comp) *comp = s->img_n; |
|
|
|
|
|
|
|
|
|
if (!stbi__mad3sizes_valid(s->img_n, s->img_x, s->img_y, 0)) |
|
|
|
|
if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) |
|
|
|
|
return stbi__errpuc("too large", "PNM too large"); |
|
|
|
|
|
|
|
|
|
out = (stbi_uc *) stbi__malloc_mad3(s->img_n, s->img_x, s->img_y, 0); |
|
|
|
|
out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); |
|
|
|
|
if (!out) return stbi__errpuc("outofmem", "Out of memory"); |
|
|
|
|
stbi__getn(s, out, s->img_n * s->img_x * s->img_y); |
|
|
|
|
stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8)); |
|
|
|
|
|
|
|
|
|
if (req_comp && req_comp != s->img_n) { |
|
|
|
|
out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); |
|
|
|
@ -7413,12 +7415,21 @@ static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) |
|
|
|
|
stbi__pnm_skip_whitespace(s, &c); |
|
|
|
|
|
|
|
|
|
maxv = stbi__pnm_getinteger(s, &c); // read max value
|
|
|
|
|
|
|
|
|
|
if (maxv > 255) |
|
|
|
|
return stbi__err("max value > 255", "PPM image not 8-bit"); |
|
|
|
|
if (maxv > 65535) |
|
|
|
|
return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); |
|
|
|
|
else if (maxv > 255) |
|
|
|
|
return 16; |
|
|
|
|
else |
|
|
|
|
return 1; |
|
|
|
|
return 8; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int stbi__pnm_is16(stbi__context *s) |
|
|
|
|
{ |
|
|
|
|
if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) |
|
|
|
|
return 1; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) |
|
|
|
@ -7473,6 +7484,9 @@ static int stbi__is_16_main(stbi__context *s) |
|
|
|
|
if (stbi__psd_is16(s)) return 1; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifndef STBI_NO_PNM |
|
|
|
|
if (stbi__pnm_is16(s)) return 1; |
|
|
|
|
#endif |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|