]> granicus.if.org Git - imagemagick/commitdiff
Write correct pitch and channel bitmasks for uncompressed DDS images.
authorDan Skorupski <dan.skorupski@gmail.com>
Mon, 18 Jan 2016 02:37:31 +0000 (20:37 -0600)
committerdirk <dirk@git.imagemagick.org>
Tue, 19 Jan 2016 20:59:52 +0000 (21:59 +0100)
coders/dds.c

index f9a108001aaf556534b01dc53ef31c6c3673a86a..e9bc5dfa6040034b4d8ddc9c864e43057aa23be0 100644 (file)
@@ -2708,12 +2708,22 @@ static void WriteDDSInfo(Image *image, const size_t pixelFormat,
   (void) WriteBlobLSBLong(image,(unsigned int) image->rows);
   (void) WriteBlobLSBLong(image,(unsigned int) image->columns);
 
-  if (compression == FOURCC_DXT1)
-    (void) WriteBlobLSBLong(image,
-             (unsigned int) (MagickMax(1,(image->columns+3)/4) * 8));
+  if (pixelFormat == DDPF_FOURCC)
+    {
+      if (compression == FOURCC_DXT1)
+        (void) WriteBlobLSBLong(image,
+                 (unsigned int) (MagickMax(1,(image->columns+3)/4) * 8));
+      else
+        (void) WriteBlobLSBLong(image,
+                 (unsigned int) (MagickMax(1,(image->columns+3)/4) * 16));
+    }
   else
-    (void) WriteBlobLSBLong(image,
-             (unsigned int) (MagickMax(1,(image->columns+3)/4) * 16));
+    {
+      if (image->alpha_trait != UndefinedPixelTrait)
+        (void) WriteBlobLSBLong(image,(unsigned int) (image->columns * 32));
+      else
+        (void) WriteBlobLSBLong(image,(unsigned int) (image->columns * 24));
+    }
 
   (void) WriteBlobLSBLong(image,0x00);
   (void) WriteBlobLSBLong(image,(unsigned int) mipmaps+1);
@@ -2744,10 +2754,10 @@ static void WriteDDSInfo(Image *image, const size_t pixelFormat,
       else
         {
           (void) WriteBlobLSBLong(image,24);
+          (void) WriteBlobLSBLong(image,0xff0000);
+          (void) WriteBlobLSBLong(image,0xff00);
           (void) WriteBlobLSBLong(image,0xff);
           (void) WriteBlobLSBLong(image,0x00);
-          (void) WriteBlobLSBLong(image,0x00);
-          (void) WriteBlobLSBLong(image,0x00);
         }
     }