diff --git a/stb_image.h b/stb_image.h index a056138dd042d76c85e82bd69e15d73958fb4fcb..193ada12c638f2eb349d0b7d9fe6a84cf6a2212f 100644 --- a/stb_image.h +++ b/stb_image.h @@ -4902,7 +4902,7 @@ static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) } if (x) *x = p->s->img_x; if (y) *y = p->s->img_y; - if (comp) *comp = p->s->img_n; + if (comp) *comp = p->s->img_n * p->depth / 8; return 1; } @@ -6667,7 +6667,7 @@ static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) #ifndef STBI_NO_PSD static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) { - int channelCount, dummy; + int channelCount, dummy, depth; if (!x) x = &dummy; if (!y) y = &dummy; if (!comp) comp = &dummy; @@ -6687,7 +6687,8 @@ static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) } *y = stbi__get32be(s); *x = stbi__get32be(s); - if (stbi__get16be(s) != 8) { + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { stbi__rewind( s ); return 0; } @@ -6695,7 +6696,7 @@ static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) stbi__rewind( s ); return 0; } - *comp = 4; + *comp = 4 * depth / 8; return 1; } #endif