From: Dan Skorupski Date: Mon, 18 Jan 2016 02:37:31 +0000 (-0600) Subject: Write correct pitch and channel bitmasks for uncompressed DDS images. X-Git-Tag: 7.0.1-0~318 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7cd5b950c64ead38f7733f76847ae3b459b52e53;p=imagemagick Write correct pitch and channel bitmasks for uncompressed DDS images. --- 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); } }