From 4469a98cd74b7f39471f84bb99445f9bdba385e6 Mon Sep 17 00:00:00 2001 From: Pedro Gimeno Date: Wed, 16 Sep 2015 20:28:29 +0200 Subject: [PATCH] Wrong TGA header generated by j2k_to_image The TGA file writer used by j2k_to_image writes a wrong field to the header for alpha-less images. To reproduce: 1. Take any 24-bit j2k image with no alpha. 2. Convert it to TGA with j2k_to_image -i .j2k -o .tga 3. Open .tga with Gimp. When opened, the image will have a wrong alpha channel, because Gimp uses a certain field in the header to determine if the image has alpha. That field is saved wrongly by j2k_to_image for alpha-less images. Per the TGA specification, Gimp is correct in this case. --- applications/codec/convert.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/codec/convert.c b/applications/codec/convert.c index 082aa2cb..f1ac4791 100644 --- a/applications/codec/convert.c +++ b/applications/codec/convert.c @@ -243,7 +243,10 @@ static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height, if(fwrite(&pixel_depth, 1, 1, fp) != 1) goto fails; - image_desc = 8; /* 8 bits per component. */ + image_desc = // bits 0-3 are # of alpha bits per pixel + bits_per_pixel == 16 ? 1 : + bits_per_pixel == 32 ? 8 : + 0; if (flip_image) image_desc |= 32;