summaryrefslogtreecommitdiff
path: root/gutils
diff options
context:
space:
mode:
authorpfaedit <pfaedit>2008-11-07 22:11:22 +0000
committerpfaedit <pfaedit>2008-11-07 22:11:22 +0000
commit4e55bd26bf458b367695cf951267b37e58d5d01c (patch)
tree745f10774148c63d4327620560c23ebedf266a5a /gutils
parent356f474acc68b11e0d6ac9a7bf35c626aa97d3c9 (diff)
Patch by KANOU: Fix to bmp output.
Diffstat (limited to 'gutils')
-rw-r--r--gutils/gimagewritebmp.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gutils/gimagewritebmp.c b/gutils/gimagewritebmp.c
index 7e9dbfad..f1b0db85 100644
--- a/gutils/gimagewritebmp.c
+++ b/gutils/gimagewritebmp.c
@@ -42,6 +42,7 @@ static void putl(short s, FILE *file) {
int GImageWrite_Bmp(GImage *gi, FILE *file) {
struct _GImage *base = gi->list_len==0?gi->u.image:gi->u.images[0];
int headersize=40, preheadersize=14;
+ int filesize, offset, imagesize;
int bitsperpixel, clutsize, ncol;
int row, col, i;
@@ -61,20 +62,23 @@ int GImageWrite_Bmp(GImage *gi, FILE *file) {
clutsize = 0;
ncol = 0;
}
+ imagesize = ((base->bytes_per_line + 3) & ~3U) * base->height;
+ offset = preheadersize + headersize + clutsize;
+ filesize = offset + imagesize;
putc('B',file);
putc('M',file);
- putl(0,file); /* filesize */
+ putl(filesize,file); /* filesize */
myputs(0,file); /* mbz1 */
myputs(0,file); /* mbz2 */
- putl(preheadersize+headersize+clutsize,file);/* offset */
+ putl(offset,file); /* offset */
putl(headersize,file); /* headersize */
putl(base->width,file); /* width */
putl(base->height,file); /* height */
myputs(1,file); /* planes */
myputs(bitsperpixel,file); /* bitsperpixel */
putl(0,file); /* compression */
- putl(0,file); /* imagesize */
+ putl(imagesize,file); /* imagesize */
putl(3000,file); /* horizontal res, pixels/meter */
putl(3000,file); /* vertical res, pixels/meter */
putl(ncol,file); /* colours used */