diff options
author | Luiz Carlos Ramos <lramos.prof@yahoo.com.br> | 2019-12-06 07:48:14 -0300 |
---|---|---|
committer | Kim Woelders <kim@woelders.dk> | 2019-12-08 14:39:09 +0100 |
commit | 641dd66349e30d5dc13bdeb972aae9a074894c34 (patch) | |
tree | 95a37610044e0afed66d627af03d274c6027cddb | |
parent | 48ff9e10c1f318117f40b64100e8928aff911693 (diff) | |
download | imlib2-641dd66349e30d5dc13bdeb972aae9a074894c34.tar.gz |
BMP loader: Fix size calculation when saving files
The sizes stored both in BMP file and bitmap headers were not considering the
padding of each row, leading to smaller values when the width was not multiple
of 4.
Fixed by including the padding in the formula.
-rw-r--r-- | src/modules/loaders/loader_bmp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c index d319b3d..2fa8616 100644 --- a/src/modules/loaders/loader_bmp.c +++ b/src/modules/loaders/loader_bmp.c @@ -921,7 +921,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) /* write BMP file header */ WriteleShort(f, 0x4d42); /* prefix */ - WriteleLong(f, 54 + 3 * im->w * im->h); /* filesize */ + WriteleLong(f, 54 + ((3 * im->w) + pad) * im->h); /* filesize (padding should be considered) */ WriteleShort(f, 0x0000); /* reserved #1 */ WriteleShort(f, 0x0000); /* reserved #2 */ WriteleLong(f, 54); /* offset to image data */ @@ -933,7 +933,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) WriteleShort(f, 1); /* one plane */ WriteleShort(f, 24); /* bits per pixel */ WriteleLong(f, 0); /* no compression */ - WriteleLong(f, 3 * im->w * im->h); + WriteleLong(f, ((3 * im->w) + pad) * im->h); /* padding should be counted */ for (i = 0; i < 4; i++) WriteleLong(f, 0x0000); /* pad to end of header */ |