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)
 Converts an HDRI into a cubemap.
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.
std::vector< std::byte > vtfpp::ImageConversion::gammaCorrectImageData (std::span< const 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.
std::vector< std::byte > vtfpp::ImageConversion::invertGreenChannelForImageData (std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t height)
 Invert the green channel. Meant for converting normal maps between OpenGL and DirectX formats.

Variables

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