SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
ImageConversion.h File Reference
#include <array>
#include <cstddef>
#include <span>
#include <vector>
#include <BufferStream.h>
#include "ImageFormats.h"
Include dependency graph for ImageConversion.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  vtfpp::ImageConversion::ResizeBounds

Namespaces

namespace  vtfpp
namespace  vtfpp::ImageConversion

Enumerations

enum class  vtfpp::ImageConversion::FileFormat {
  vtfpp::ImageConversion::DEFAULT = 0 , vtfpp::ImageConversion::PNG = 1 , vtfpp::ImageConversion::JPG = 2 , vtfpp::ImageConversion::BMP = 3 ,
  vtfpp::ImageConversion::TGA = 4 , vtfpp::ImageConversion::HDR = 7
}
enum class  vtfpp::ImageConversion::ResizeEdge { vtfpp::ImageConversion::CLAMP = 0 , vtfpp::ImageConversion::REFLECT , vtfpp::ImageConversion::WRAP , vtfpp::ImageConversion::ZERO }
enum class  vtfpp::ImageConversion::ResizeFilter {
  vtfpp::ImageConversion::DEFAULT = 0 , vtfpp::ImageConversion::BOX , vtfpp::ImageConversion::BILINEAR , vtfpp::ImageConversion::CUBIC_BSPLINE ,
  vtfpp::ImageConversion::CATMULL_ROM , vtfpp::ImageConversion::MITCHELL , vtfpp::ImageConversion::POINT_SAMPLE , vtfpp::ImageConversion::KAISER = 100 ,
  vtfpp::ImageConversion::NICE = 101
}
enum class  vtfpp::ImageConversion::ResizeMethod { vtfpp::ImageConversion::NONE , vtfpp::ImageConversion::POWER_OF_TWO_BIGGER , vtfpp::ImageConversion::POWER_OF_TWO_SMALLER , vtfpp::ImageConversion::POWER_OF_TWO_NEAREST }

Functions

std::vector< std::byte > vtfpp::ImageConversion::convertImageDataToFormat (std::span< const std::byte > imageData, ImageFormat oldFormat, ImageFormat newFormat, uint16_t width, uint16_t height, float quality=DEFAULT_COMPRESSED_QUALITY)
 Converts an image from one format to another.
std::vector< std::byte > vtfpp::ImageConversion::convertSeveralImageDataToFormat (std::span< const std::byte > imageData, ImageFormat oldFormat, ImageFormat newFormat, uint8_t mipCount, uint16_t frameCount, uint8_t faceCount, uint16_t width, uint16_t height, uint16_t depth, float quality=DEFAULT_COMPRESSED_QUALITY)
 Converts several images from one format to another.
std::array< std::vector< std::byte >, 6 > vtfpp::ImageConversion::convertHDRIToCubeMap (std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t height, uint16_t resolution=0, bool bilinear=true, bool skybox=false)
 Converts an HDRI into six cubemap (or skybox) faces.
std::vector< std::byte > vtfpp::ImageConversion::compressBGRA8888HDR (std::span< const std::byte > imageData, float overbrightFactor=16.f)
 Takes in RGBA32323232F format image data, returns SOURCEPP_BGRA8888_HDR compressed HDR image data (alias for BGRA8888).
std::vector< std::byte > vtfpp::ImageConversion::decompressBGRA8888HDR (std::span< const std::byte > imageData, float overbrightFactor=16.f)
 Takes in SOURCEPP_BGRA8888_HDR compressed HDR image data (alias for BGRA8888), returns RGBA32323232F format image data.
std::vector< std::byte > vtfpp::ImageConversion::compressRGBA16161616HDR (std::span< const std::byte > imageData, bool flipExponentAndSignificand=false)
 Takes in RGBA32323232F format image data, returns SOURCEPP_RGBA16161616_HDR compressed HDR image data (alias for RGBA16161616).
std::vector< std::byte > vtfpp::ImageConversion::decompressRGBA16161616HDR (std::span< const std::byte > imageData, bool flipExponentAndSignificand=false)
 Takes in SOURCEPP_RGBA16161616_HDR compressed HDR image data (alias for RGBA16161616), returns RGBA32323232F format image data.
FileFormat vtfpp::ImageConversion::getDefaultFileFormatForImageFormat (ImageFormat format)
 PNG for integer formats, EXR for floating point formats (or HDR if EXR support is disabled).
std::vector< std::byte > vtfpp::ImageConversion::convertImageDataToFile (std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t height, FileFormat fileFormat=FileFormat::DEFAULT)
 Converts image data to the given file format (PNG or EXR by default).
std::vector< std::byte > vtfpp::ImageConversion::convertFileToImageData (std::span< const std::byte > fileData, ImageFormat &format, int &width, int &height, int &frameCount)
uint16_t vtfpp::ImageConversion::getResizedDim (uint16_t n, ResizeMethod method)
 Get the new image size given a resize method.
void vtfpp::ImageConversion::setResizedDims (uint16_t &width, ResizeMethod widthResize, uint16_t &height, ResizeMethod heightResize)
 Set the new image dimensions given a resize method.
std::vector< std::byte > vtfpp::ImageConversion::resizeImageData (std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t newWidth, uint16_t height, uint16_t newHeight, bool srgb, ResizeFilter filter, ResizeEdge edge=ResizeEdge::CLAMP)
 Resize given image data to the new dimensions.
std::vector< std::byte > vtfpp::ImageConversion::resizeImageDataStrict (std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t newWidth, uint16_t &widthOut, ResizeMethod widthResize, uint16_t height, uint16_t newHeight, uint16_t &heightOut, ResizeMethod heightResize, bool srgb, ResizeFilter filter, ResizeEdge edge=ResizeEdge::CLAMP)
 Resize given image data to the new dimensions, where the new width and height are governed by the resize methods.
std::vector< std::byte > vtfpp::ImageConversion::cropImageData (std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t newWidth, uint16_t xOffset, uint16_t height, uint16_t newHeight, uint16_t yOffset)
 Crops the given image to the new dimensions. If the image format is compressed it will be converted to its container format before the crop, and converted back before returning.
std::vector< std::byte > vtfpp::ImageConversion::padImageData (std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t widthPad, uint16_t height, uint16_t heightPad)
 Pad the given image with pixels that are the same color as the edge. Padding is applied to the right and bottom of the image.
void vtfpp::ImageConversion::gammaCorrectImageData (std::span< std::byte > imageData, ImageFormat format, uint16_t width, uint16_t height, float gamma)
 Perform gamma correction on the given image data. Will not perform gamma correction if the input image format is large, console, P8, A8, UV88, UVLX8888, or UVWQ8888.
void vtfpp::ImageConversion::invertGreenChannelForImageData (std::span< std::byte > imageData, ImageFormat format, uint16_t width, uint16_t height)
 Invert the green channel on the given image data. Meant for converting normal maps between OpenGL and DirectX formats.
void vtfpp::ImageConversion::hableTonemapImageData (std::span< std::byte > imageData, ImageFormat format, uint16_t width, uint16_t height)
 Perform Hable tonemapping on the given image data.

Variables

constexpr float vtfpp::ImageConversion::DEFAULT_COMPRESSED_QUALITY = -1.f