summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Carlos Ramos <lramos.prof@yahoo.com.br>2019-12-06 07:48:14 -0300
committerKim Woelders <kim@woelders.dk>2019-12-08 14:39:09 +0100
commit641dd66349e30d5dc13bdeb972aae9a074894c34 (patch)
tree95a37610044e0afed66d627af03d274c6027cddb
parent48ff9e10c1f318117f40b64100e8928aff911693 (diff)
downloadimlib2-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.c4
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 */