|
@@ -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) {
|