GraphicsMagick: coders/bmp.c: Fix BMP 64bpp reader. See this URL...
GraphicsMagick Commits <[email protected]> Sat, 30 Sep 2023 18:27:44 -0500
| Newsgroups | gmane.comp.video.graphicsmagick.cvs |
|---|---|
| Message-ID | <mailman.5141.1696116477.1961.graphicsmagick-commit@lists.sourceforge.net> |
changeset 2cebe8a082c5 in /hg/GraphicsMagick details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=2cebe8a082c5 summary: coders/bmp.c: Fix BMP 64bpp reader. See this URL: https://stackoverflow.com/questions/20778227/get-64bpp-image-color diffstat: ChangeLog | 5 +++++ coders/bmp.c | 34 +++++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diffs (73 lines): diff -r 123df8ed6be8 -r 2cebe8a082c5 ChangeLog --- a/ChangeLog Sat Sep 30 10:48:01 2023 +0200 +++ b/ChangeLog Sun Oct 01 01:26:24 2023 +0200 @@ -1,3 +1,8 @@ +2023-10-01 Fojtik Jaroslav <[email protected]> + + * coders/bmp.c: Fix BMP 64bpp reader. See this URL: + https://stackoverflow.com/questions/20778227/get-64bpp-image-color + 2023-09-30 Fojtik Jaroslav <[email protected]> * coders/bmp.c: Attempt to read BMP with 64bpp. diff -r 123df8ed6be8 -r 2cebe8a082c5 coders/bmp.c --- a/coders/bmp.c Sat Sep 30 10:48:01 2023 +0200 +++ b/coders/bmp.c Sun Oct 01 01:26:24 2023 +0200 @@ -90,6 +90,24 @@ #undef LCS_GM_ABS_COLORIMETRIC #define LCS_GM_ABS_COLORIMETRIC 8 /* Absolute */ #endif /* !defined(MSWINDOWS) || defined(__MINGW32__) */ + +#if (QuantumDepth == 8) + #define MS_VAL16_TO_QUANTUM(_value) ((_value>=8192)?255:(_value>>5)) +#elif (QuantumDepth == 16) + #define MS_VAL16_TO_QUANTUM(_value) ((_value>=8192)?65535:(_value*8)) +#elif (QuantumDepth == 32) + #define MS_VAL16_TO_QUANTUM(_value) ((_value>=8192)?4294443007:(_value*524288)) +#else +# error Unsupported quantum depth. +#endif + + +#ifdef WORDS_BIGENDIAN + #define LD_UINT16_LSB(_pixel, _ptr) _pixel=(magick_uint16_t)*_ptr++; _pixel|=(magick_uint16_t)*_ptr++ << 8 +#else + #define LD_UINT16_LSB(_pixel, _ptr) _pixel=*(magick_uint16_t*)_ptr; _ptr+=2 +#endif + /* Typedef declarations. @@ -1751,23 +1769,25 @@ } case 64: { - register magick_uint16_t *p16; + magick_uint16_t val_16; /* Convert DirectColor scanline. */ - bytes_per_line = 4*((image->columns*64+31)/32); for(y=(long) image->rows-1; y >= 0; y--) { - p16 = pixels+(image->rows-y-1)*bytes_per_line; + p = pixels+(image->rows-y-1)*bytes_per_line; q = SetImagePixels(image,0,y,image->columns,1); if(q == (PixelPacket *) NULL) break; for(x=0; x < (long) image->columns; x++) { - q->blue=ScaleShortToQuantum(*p16++); - q->green=ScaleShortToQuantum(*p16++); - q->red=ScaleShortToQuantum(*p16++); - p16++; /* TODO: add alpha*/ + LD_UINT16_LSB(val_16,p); + q->blue = MS_VAL16_TO_QUANTUM(val_16); + LD_UINT16_LSB(val_16,p); + q->green = MS_VAL16_TO_QUANTUM(val_16); + LD_UINT16_LSB(val_16,p); + q->red = MS_VAL16_TO_QUANTUM(val_16); + p+=2; /* TODO: add alpha*/ q++; } if(!SyncImagePixels(image))