From 7cd5b950c64ead38f7733f76847ae3b459b52e53 Mon Sep 17 00:00:00 2001 From: Dan Skorupski Date: Sun, 17 Jan 2016 20:37:31 -0600 Subject: [PATCH] Write correct pitch and channel bitmasks for uncompressed DDS images. --- coders/dds.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/coders/dds.c b/coders/dds.c index f9a108001..e9bc5dfa6 100644 --- a/coders/dds.c +++ b/coders/dds.c @@ -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); } } -- 2.40.0