public static Bitmap LoadDDJ(byte[] buffer) { if (buffer == null) { return(new Bitmap(256, 256, PixelFormat.Format16bppRgb555)); } Bitmap bitmap; using (Stream stream = new MemoryStream(buffer, 20, buffer.GetUpperBound(0) - 0x13)) { FreeImageAPI.FREE_IMAGE_FORMAT format = FreeImageAPI.FREE_IMAGE_FORMAT.FIF_DDS; FreeImageAPI.FIBITMAP dib = FreeImageAPI.FreeImage.LoadFromStream(stream, FreeImageAPI.FREE_IMAGE_LOAD_FLAGS.DEFAULT, ref format); bitmap = FreeImageAPI.FreeImage.GetBitmap(dib); FreeImageAPI.FreeImage.UnloadEx(ref dib); } return(bitmap); }
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); }