示例#1
0
        /**
         * Get a deep copy of the image palette.
         * @param bitmap Pointer to a loaded image.
         * @return Array or RGBQUAD values representing the image palette.
         */
        public static unsafe RGBQUAD [] GetPaletteCopy(FIBITMAP dib)
        {
            RGBQUAD [] paletteCopy = new FreeImageAPI.RGBQUAD[256];

            // Only interested in indexed images.
            if (GetBPP(dib) <= 8)
            {
                UIntPtr palette = GetRawPalette(dib);
                byte *  ptr     = (byte *)(void *)palette;
                for (int q = 0; q < 256; q++)
                {
                    paletteCopy[q]         = new FreeImageAPI.RGBQUAD();
                    paletteCopy[q].rgbBlue = (byte)*ptr;
                    ptr += 1;
                    paletteCopy[q].rgbGreen = (byte)*ptr;
                    ptr += 1;
                    paletteCopy[q].rgbRed = (byte)*ptr;
                    ptr += 1;
                    paletteCopy[q].rgbReserved = (byte)*ptr;
                    ptr += 1;
                }
            }

            return(paletteCopy);
        }
        public ITexture2D GetIBLTexture(string path)
        {
            FreeImageAPI.FREE_IMAGE_FORMAT type   = FreeImageAPI.FreeImage.GetFileType(path, 0);
            FreeImageAPI.FIBITMAP          bitmap = FreeImageAPI.FreeImage.Load(type, path, FreeImageAPI.FREE_IMAGE_LOAD_FLAGS.DEFAULT);
            //FreeImageAPI.FIBITMAP convert = FreeImageAPI.FreeImage.ToneMapping(bitmap, FreeImageAPI.FREE_IMAGE_TMO.FITMO_DRAGO03, 0, 0);
            FreeImageAPI.FIBITMAP convert = FreeImageAPI.FreeImage.ToneMapping(bitmap, FreeImageAPI.FREE_IMAGE_TMO.FITMO_REINHARD05, 0, 0);

            if (bitmap.IsNull)
            {
                return(null);
            }
            uint width     = FreeImageAPI.FreeImage.GetWidth(convert);
            uint height    = FreeImageAPI.FreeImage.GetHeight(convert);
            int  channelNo = 3;

            byte[] imgData = new byte[width * height * channelNo];
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    int idx = i * (int)width + j;
                    FreeImageAPI.RGBQUAD color = new FreeImageAPI.RGBQUAD();
                    int byteIdx = idx * channelNo;
                    byteIdx -= 1;
                    bool  pSuccess = FreeImageAPI.FreeImage.GetPixelColor(convert, (uint)j, (uint)i, out color);
                    Color nColor   = color.Color;

                    imgData[byteIdx + 1] = color.rgbRed;
                    imgData[byteIdx + 2] = color.rgbGreen;
                    imgData[byteIdx + 3] = color.rgbBlue;

                    if (!pSuccess)
                    {
                        return(null);
                    }
                }
            }
            Texture2dGL text = Texture2dGL.Create((int)width, (int)height);
            IntPtr      ptr  = Marshal.UnsafeAddrOfPinnedArrayElement(imgData, 0);

            text.LoadPixels(ptr, (int)width, (int)height, OpenTK.Graphics.OpenGL4.PixelInternalFormat.Rgb8, OpenTK.Graphics.OpenGL4.PixelFormat.Rgb, OpenTK.Graphics.OpenGL4.PixelType.UnsignedByte);
            return(text);
        }
示例#3
0
        /**
        Get a deep copy of the image palette.
        @param bitmap Pointer to a loaded image.
        @return Array or RGBQUAD values representing the image palette.
        */
        public static unsafe RGBQUAD[] GetPaletteCopy(FIBITMAP dib)
        {
            RGBQUAD [] paletteCopy = new FreeImageAPI.RGBQUAD[256];

            // Only interested in indexed images.
            if (GetBPP(dib) <= 8) {
                UIntPtr palette = GetRawPalette(dib);
             				byte * ptr = (byte *)(void*)palette;
             				for (int q = 0; q < 256; q++) {
                    paletteCopy[q] = new FreeImageAPI.RGBQUAD();
                    paletteCopy[q].rgbBlue = (byte)*ptr;
                    ptr += 1;
                    paletteCopy[q].rgbGreen = (byte)*ptr;
                    ptr += 1;
                    paletteCopy[q].rgbRed = (byte)*ptr;
                    ptr += 1;
                    paletteCopy[q].rgbReserved = (byte)*ptr;
                    ptr += 1;
                }
            }

            return paletteCopy;
        }