/**************************************************************************************/ /* */ /* Visualization Library */ /* http://visualizationlibrary.org */ /* */ /* Copyright (c) 2005-2020, Michele Bosi */ /* All rights reserved. */ /* */ /* Redistribution and use in source and binary forms, with or without modification, */ /* are permitted provided that the following conditions are met: */ /* */ /* - Redistributions of source code must retain the above copyright notice, this */ /* list of conditions and the following disclaimer. */ /* */ /* - Redistributions in binary form must reproduce the above copyright notice, this */ /* list of conditions and the following disclaimer in the documentation and/or */ /* other materials provided with the distribution. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND */ /* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR */ /* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */ /* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ /* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* */ /**************************************************************************************/ #ifndef ImageTools_INCLUDE_ONCE #define ImageTools_INCLUDE_ONCE #include namespace vl { //----------------------------------------------------------------------------- typedef unsigned char TPalette3x256[256*3]; typedef unsigned char TPalette4x256[256*4]; //----------------------------------------------------------------------------- inline void convertRGBToRGBA(void* buf, int w, int h, unsigned char alpha, int bytealign = 1) { int xbytes = w*3; int pitch = (xbytes / bytealign * bytealign) + ((xbytes % bytealign)? bytealign : 0); if(bytealign) { // compact the image unsigned char *pxl1 = (unsigned char *)buf; unsigned char *pxl2 = (unsigned char *)buf; int count = 0; for(int i=0; i> 2)) & ~0x03; unsigned char b = (px8[0] << 3) & ~0x03; // photoshop sets it to zero // int a = (px8[1] & 0x80) ? 0xFF : 0; px32[0] = r; px32[1] = g; px32[2] = b; px32[3] = alpha; px8 -= 2; px32 -= 4; } } //----------------------------------------------------------------------------- inline void convert8ToRGBA(const TPalette3x256 & palette, void* buf, int w, int h, unsigned char alpha, int bytealign = 1) { int xbytes = w; int pitch = (xbytes / bytealign * bytealign) + ((xbytes % bytealign)? bytealign : 0); if(bytealign) { // compact the image unsigned char *pxl1 = (unsigned char *)buf; unsigned char *pxl2 = (unsigned char *)buf; int count = 0; for(int i=0; i