diff options
author | pfaedit <pfaedit> | 2008-11-07 22:11:22 +0000 |
---|---|---|
committer | pfaedit <pfaedit> | 2008-11-07 22:11:22 +0000 |
commit | 4e55bd26bf458b367695cf951267b37e58d5d01c (patch) | |
tree | 745f10774148c63d4327620560c23ebedf266a5a /gutils | |
parent | 356f474acc68b11e0d6ac9a7bf35c626aa97d3c9 (diff) |
Patch by KANOU: Fix to bmp output.
Diffstat (limited to 'gutils')
-rw-r--r-- | gutils/gimagewritebmp.c | 10 |
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 */ |