mirror of https://github.com/nothings/stb.git
fix monochrome bmp support
This commit is contained in:
parent
6e0ae49f87
commit
6639ef6d5a
|
@ -108,7 +108,7 @@ static void write3(FILE *f, unsigned char a, unsigned char b, unsigned char c)
|
||||||
fwrite(arr, 3, 1, f);
|
fwrite(arr, 3, 1, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad)
|
static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono)
|
||||||
{
|
{
|
||||||
unsigned char bg[3] = { 255, 0, 255}, px[3];
|
unsigned char bg[3] = { 255, 0, 255}, px[3];
|
||||||
stbiw_uint32 zero = 0;
|
stbiw_uint32 zero = 0;
|
||||||
|
@ -128,8 +128,12 @@ static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp,
|
||||||
if (write_alpha < 0)
|
if (write_alpha < 0)
|
||||||
fwrite(&d[comp-1], 1, 1, f);
|
fwrite(&d[comp-1], 1, 1, f);
|
||||||
switch (comp) {
|
switch (comp) {
|
||||||
case 1:
|
case 1: fwrite(d, 1, 1, f);
|
||||||
case 2: fwrite(d, 1, 1, f);
|
break;
|
||||||
|
case 2: if (expand_mono)
|
||||||
|
write3(f, d[0],d[0],d[0]); // monochrome bmp
|
||||||
|
else
|
||||||
|
fwrite(d, 1, 1, f); // monochrome TGA
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (!write_alpha) {
|
if (!write_alpha) {
|
||||||
|
@ -151,7 +155,7 @@ static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, int comp, void *data, int alpha, int pad, const char *fmt, ...)
|
static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
if (y < 0 || x < 0) return 0;
|
if (y < 0 || x < 0) return 0;
|
||||||
|
@ -161,7 +165,7 @@ static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, in
|
||||||
va_start(v, fmt);
|
va_start(v, fmt);
|
||||||
writefv(f, fmt, v);
|
writefv(f, fmt, v);
|
||||||
va_end(v);
|
va_end(v);
|
||||||
write_pixels(f,rgb_dir,vdir,x,y,comp,data,alpha,pad);
|
write_pixels(f,rgb_dir,vdir,x,y,comp,data,alpha,pad,expand_mono);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
return f != NULL;
|
return f != NULL;
|
||||||
|
@ -170,7 +174,7 @@ static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, in
|
||||||
int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data)
|
int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data)
|
||||||
{
|
{
|
||||||
int pad = (-x*3) & 3;
|
int pad = (-x*3) & 3;
|
||||||
return outfile(filename,-1,-1,x,y,comp,(void *) data,0,pad,
|
return outfile(filename,-1,-1,x,y,comp,1,(void *) data,0,pad,
|
||||||
"11 4 22 4" "4 44 22 444444",
|
"11 4 22 4" "4 44 22 444444",
|
||||||
'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header
|
'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header
|
||||||
40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header
|
40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header
|
||||||
|
@ -181,7 +185,7 @@ int stbi_write_tga(char const *filename, int x, int y, int comp, const void *dat
|
||||||
int has_alpha = (comp == 2 || comp == 4);
|
int has_alpha = (comp == 2 || comp == 4);
|
||||||
int colorbytes = has_alpha ? comp-1 : comp;
|
int colorbytes = has_alpha ? comp-1 : comp;
|
||||||
int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3
|
int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3
|
||||||
return outfile(filename, -1,-1, x, y, comp, (void *) data, has_alpha, 0,
|
return outfile(filename, -1,-1, x, y, comp, 0, (void *) data, has_alpha, 0,
|
||||||
"111 221 2222 11", 0,0,format, 0,0,0, 0,0,x,y, (colorbytes+has_alpha)*8, has_alpha*8);
|
"111 221 2222 11", 0,0,format, 0,0,0, 0,0,x,y, (colorbytes+has_alpha)*8, has_alpha*8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue