|
|
|
@ -1,4 +1,4 @@ |
|
|
|
|
/* stb_image - v2.06 - public domain image loader - http://nothings.org/stb_image.h
|
|
|
|
|
/* stb_image - v2.08 - public domain image loader - http://nothings.org/stb_image.h
|
|
|
|
|
no warranty implied; use at your own risk |
|
|
|
|
|
|
|
|
|
Do this: |
|
|
|
@ -205,6 +205,7 @@ |
|
|
|
|
Joseph Thomson |
|
|
|
|
Phil Jordan |
|
|
|
|
Nathan Reed |
|
|
|
|
urraka@github |
|
|
|
|
|
|
|
|
|
LICENSE |
|
|
|
|
|
|
|
|
@ -4112,20 +4113,21 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r |
|
|
|
|
if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); |
|
|
|
|
} |
|
|
|
|
if (img_n != out_n) { |
|
|
|
|
int q; |
|
|
|
|
// insert alpha = 255
|
|
|
|
|
cur = a->out + stride*j; |
|
|
|
|
if (img_n == 1) { |
|
|
|
|
for (i=x-1; i >= 0; --i) { |
|
|
|
|
cur[i*2+1] = 255; |
|
|
|
|
cur[i*2+0] = cur[i]; |
|
|
|
|
for (q=x-1; q >= 0; --q) { |
|
|
|
|
cur[q*2+1] = 255; |
|
|
|
|
cur[q*2+0] = cur[q]; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
STBI_ASSERT(img_n == 3); |
|
|
|
|
for (i=x-1; i >= 0; --i) { |
|
|
|
|
cur[i*4+3] = 255; |
|
|
|
|
cur[i*4+2] = cur[i*3+2]; |
|
|
|
|
cur[i*4+1] = cur[i*3+1]; |
|
|
|
|
cur[i*4+0] = cur[i*3+0]; |
|
|
|
|
for (q=x-1; q >= 0; --q) { |
|
|
|
|
cur[q*4+3] = 255; |
|
|
|
|
cur[q*4+2] = cur[q*3+2]; |
|
|
|
|
cur[q*4+1] = cur[q*3+1]; |
|
|
|
|
cur[q*4+0] = cur[q*3+0]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -4580,7 +4582,7 @@ static int stbi__shiftsigned(int v, int shift, int bits) |
|
|
|
|
static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) |
|
|
|
|
{ |
|
|
|
|
stbi_uc *out; |
|
|
|
|
unsigned int mr=0,mg=0,mb=0,ma=0, fake_a=0; |
|
|
|
|
unsigned int mr=0,mg=0,mb=0,ma=0, all_a=255; |
|
|
|
|
stbi_uc pal[256][4]; |
|
|
|
|
int psize=0,i,j,compress=0,width; |
|
|
|
|
int bpp, flip_vertically, pad, target, offset, hsz; |
|
|
|
@ -4629,8 +4631,7 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int |
|
|
|
|
mg = 0xffu << 8; |
|
|
|
|
mb = 0xffu << 0; |
|
|
|
|
ma = 0xffu << 24; |
|
|
|
|
fake_a = 1; // @TODO: check for cases like alpha value is all 0 and switch it to 255
|
|
|
|
|
STBI_NOTUSED(fake_a); |
|
|
|
|
all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0
|
|
|
|
|
} else { |
|
|
|
|
mr = 31u << 10; |
|
|
|
|
mg = 31u << 5; |
|
|
|
@ -4741,6 +4742,7 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int |
|
|
|
|
out[z+0] = stbi__get8(s); |
|
|
|
|
z += 3; |
|
|
|
|
a = (easy == 2 ? stbi__get8(s) : 255); |
|
|
|
|
all_a |= a; |
|
|
|
|
if (target == 4) out[z++] = a; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
@ -4751,12 +4753,19 @@ static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int |
|
|
|
|
out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); |
|
|
|
|
out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); |
|
|
|
|
a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); |
|
|
|
|
all_a |= a; |
|
|
|
|
if (target == 4) out[z++] = STBI__BYTECAST(a); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
stbi__skip(s, pad); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if alpha channel is all 0s, replace with all 255s
|
|
|
|
|
if (target == 4 && all_a == 0) |
|
|
|
|
for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) |
|
|
|
|
out[i] = 255; |
|
|
|
|
|
|
|
|
|
if (flip_vertically) { |
|
|
|
|
stbi_uc t; |
|
|
|
|
for (j=0; j < (int) s->img_y>>1; ++j) { |
|
|
|
|