[gimp] Bug 653757 - Bitmap export in Gimp 2.6.11 vs Bitmap Export in Gimp 2.7.3
- From: Martin Nordholts <martinn src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 653757 - Bitmap export in Gimp 2.6.11 vs Bitmap Export in Gimp 2.7.3
- Date: Fri, 26 Aug 2011 21:49:54 +0000 (UTC)
commit 7fea63a2834cd2ebdf5137526d940fcecfadf350
Author: Martin Nordholts <martinn src gnome org>
Date: Fri Aug 12 18:09:01 2011 +0200
Bug 653757 - Bitmap export in Gimp 2.6.11 vs Bitmap Export in Gimp 2.7.3
Make writing BITMAPV5HEADER color space information optional since
there are compatibility problems with writing color space
information. Unity 3D and BlitzMax have been reported to not support
such BMP images.
NEWS | 2 +-
plug-ins/file-bmp/bmp-write.c | 98 ++++++++++++++++++++++++++++++-----------
2 files changed, 73 insertions(+), 27 deletions(-)
---
diff --git a/NEWS b/NEWS
index be3d032..06c5832 100644
--- a/NEWS
+++ b/NEWS
@@ -28,7 +28,7 @@ Libgimp:
Plug-ins:
- - <item>
+ - Make writing color space information to BMP files optional
Developer documentation:
diff --git a/plug-ins/file-bmp/bmp-write.c b/plug-ins/file-bmp/bmp-write.c
index f8feb61..52e7a9f 100644
--- a/plug-ins/file-bmp/bmp-write.c
+++ b/plug-ins/file-bmp/bmp-write.c
@@ -54,6 +54,9 @@ static struct
{
RGBMode rgb_format;
gint use_run_length_encoding;
+
+ /* Weather or not to write BITMAPV5HEADER color space data */
+ gint dont_write_color_space_data;
} BMPSaveData;
static gint cur_progress = 0;
@@ -157,6 +160,7 @@ WriteBMP (const gchar *filename,
guchar puffer[128];
gint i;
gint mask_info_size;
+ gint color_space_size;
guint32 Mask[4];
drawable = gimp_drawable_get (drawable_ID);
@@ -246,6 +250,7 @@ WriteBMP (const gchar *filename,
}
BMPSaveData.use_run_length_encoding = 0;
+ BMPSaveData.dont_write_color_space_data = 0;
mask_info_size = 0;
if (interactive || lastvals)
@@ -330,11 +335,17 @@ WriteBMP (const gchar *filename,
else
SpZeile = ((gint) (((Spcols * BitsPerPixel) / 8) / 4) + 1) * 4;
- Bitmap_File_Head.bfSize = 0x36 + MapSize + (rows * SpZeile) + mask_info_size + (68 /* V5 color space */);
- Bitmap_File_Head.zzHotX = 0;
- Bitmap_File_Head.zzHotY = 0;
- Bitmap_File_Head.bfOffs = 0x36 + MapSize + mask_info_size + 68;
- Bitmap_File_Head.biSize = 40 + mask_info_size + 68;
+ color_space_size = 0;
+ if (! BMPSaveData.dont_write_color_space_data)
+ color_space_size = 68;
+
+ Bitmap_File_Head.bfSize = (0x36 + MapSize + (rows * SpZeile) +
+ mask_info_size + color_space_size);
+ Bitmap_File_Head.zzHotX = 0;
+ Bitmap_File_Head.zzHotY = 0;
+ Bitmap_File_Head.bfOffs = (0x36 + MapSize +
+ mask_info_size + color_space_size);
+ Bitmap_File_Head.biSize = 40 + mask_info_size + color_space_size;
Bitmap_Head.biWidth = cols;
Bitmap_Head.biHeight = rows;
@@ -469,37 +480,40 @@ WriteBMP (const gchar *filename,
Write (outfile, puffer, mask_info_size);
}
- /* Write V5 colorspace fields */
+ if (! BMPSaveData.dont_write_color_space_data)
+ {
+ /* Write V5 color space fields */
- /* bV5CSType = LCS_sRGB */
- FromL (0x73524742, &puffer[0x00]);
+ /* bV5CSType = LCS_sRGB */
+ FromL (0x73524742, &puffer[0x00]);
- /* bV5Endpoints is set to 0 (ignored) */
- for (i = 0; i < 0x24; i++)
- puffer[0x04 + i] = 0x00;
+ /* bV5Endpoints is set to 0 (ignored) */
+ for (i = 0; i < 0x24; i++)
+ puffer[0x04 + i] = 0x00;
- /* bV5GammaRed is set to 0 (ignored) */
- FromL (0x0, &puffer[0x28]);
+ /* bV5GammaRed is set to 0 (ignored) */
+ FromL (0x0, &puffer[0x28]);
- /* bV5GammaGreen is set to 0 (ignored) */
- FromL (0x0, &puffer[0x2c]);
+ /* bV5GammaGreen is set to 0 (ignored) */
+ FromL (0x0, &puffer[0x2c]);
- /* bV5GammaBlue is set to 0 (ignored) */
- FromL (0x0, &puffer[0x30]);
+ /* bV5GammaBlue is set to 0 (ignored) */
+ FromL (0x0, &puffer[0x30]);
- /* bV5Intent = LCS_GM_GRAPHICS */
- FromL (0x00000002, &puffer[0x34]);
+ /* bV5Intent = LCS_GM_GRAPHICS */
+ FromL (0x00000002, &puffer[0x34]);
- /* bV5ProfileData is set to 0 (ignored) */
- FromL (0x0, &puffer[0x38]);
+ /* bV5ProfileData is set to 0 (ignored) */
+ FromL (0x0, &puffer[0x38]);
- /* bV5ProfileSize is set to 0 (ignored) */
- FromL (0x0, &puffer[0x3c]);
+ /* bV5ProfileSize is set to 0 (ignored) */
+ FromL (0x0, &puffer[0x3c]);
- /* bV5Reserved = 0 */
- FromL (0x0, &puffer[0x40]);
+ /* bV5Reserved = 0 */
+ FromL (0x0, &puffer[0x40]);
- Write (outfile, puffer, 68);
+ Write (outfile, puffer, color_space_size);
+ }
/* After that is done, we write the image ... */
@@ -831,6 +845,7 @@ save_dialog (gint channels)
GSList *group;
gboolean run;
+ /* Dialog init */
dialog = gimp_export_dialog_new (_("BMP"), PLUG_IN_BINARY, SAVE_PROC);
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
@@ -841,6 +856,7 @@ save_dialog (gint channels)
vbox_main, TRUE, TRUE, 0);
gtk_widget_show (vbox_main);
+ /* Run-Length Encoded */
toggle = gtk_check_button_new_with_mnemonic (_("_Run-Length Encoded"));
gtk_box_pack_start (GTK_BOX (vbox_main), toggle, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
@@ -853,6 +869,35 @@ save_dialog (gint channels)
G_CALLBACK (gimp_toggle_button_update),
&BMPSaveData.use_run_length_encoding);
+ /* Compatibility Options */
+ expander = gtk_expander_new_with_mnemonic (_("Co_mpatibility Options"));
+
+ gtk_box_pack_start (GTK_BOX (vbox_main), expander, TRUE, TRUE, 0);
+ gtk_widget_show (expander);
+
+ vbox2 = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), 12);
+ gtk_container_add (GTK_CONTAINER (expander), vbox2);
+ gtk_widget_show (vbox2);
+
+ toggle = gtk_check_button_new_with_mnemonic (_("_Do not write color space information"));
+ gimp_help_set_help_data (toggle,
+ _("Some applications can not read BMP images that "
+ "include color space information. GIMP writes "
+ "color space information by default. Enabling "
+ "this option will cause GIMP to not write color "
+ "space information to the file."),
+ NULL);
+ gtk_box_pack_start (GTK_BOX (vbox2), toggle, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
+ BMPSaveData.dont_write_color_space_data);
+ gtk_widget_show (toggle);
+
+ g_signal_connect (toggle, "toggled",
+ G_CALLBACK (gimp_toggle_button_update),
+ &BMPSaveData.dont_write_color_space_data);
+
+ /* Advanced Options */
expander = gtk_expander_new_with_mnemonic (_("_Advanced Options"));
gtk_box_pack_start (GTK_BOX (vbox_main), expander, TRUE, TRUE, 0);
@@ -956,6 +1001,7 @@ save_dialog (gint channels)
G_CALLBACK (format_callback),
GINT_TO_POINTER (RGBX_8888));
+ /* Dialog show */
gtk_widget_show (dialog);
run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]