Plasma Engine  2.0
Loading...
Searching...
No Matches
ImageUtils.h
1#pragma once
2
3#include <Foundation/Math/Rect.h>
4#include <Foundation/Math/Size.h>
5#include <Texture/Image/Image.h>
6#include <Texture/Image/ImageEnums.h>
7#include <Texture/Image/ImageFilter.h>
8
9class PL_TEXTURE_DLL plImageUtils
10{
11public:
13 static void ComputeImageDifferenceABS(const plImageView& imageA, const plImageView& imageB, plImage& out_difference);
14
16 static void ComputeImageDifferenceABSRelaxed(const plImageView& imageA, const plImageView& imageB, plImage& out_difference);
17
20 static plUInt32 ComputeMeanSquareError(const plImageView& differenceImage, plUInt8 uiBlockSize, plUInt32 uiOffsetx, plUInt32 uiOffsety);
21
24 static plUInt32 ComputeMeanSquareError(const plImageView& differenceImage, plUInt8 uiBlockSize);
25
28 static void Normalize(plImage& ref_image);
29 static void Normalize(plImage& ref_image, plUInt8& ref_uiMinRgb, plUInt8& ref_uiMaxRgb, plUInt8& ref_uiMinAlpha, plUInt8& ref_uiMaxAlpha);
30
32 static void ExtractAlphaChannel(const plImageView& inputImage, plImage& ref_outputImage);
33
35 static void CropImage(const plImageView& input, const plVec2I32& vOffset, const plSizeU32& newsize, plImage& ref_output);
36
38 static void RotateSubImage180(plImage& ref_image, plUInt32 uiMipLevel = 0, plUInt32 uiFace = 0, plUInt32 uiArrayIndex = 0);
39
44 static plResult Copy(const plImageView& srcImg, const plRectU32& srcRect, plImage& ref_dstImg, const plVec3U32& vDstOffset, plUInt32 uiDstMipLevel = 0,
45 plUInt32 uiDstFace = 0, plUInt32 uiDstArrayIndex = 0);
46
48 static plResult ExtractLowerMipChain(const plImageView& src, plImage& ref_dst, plUInt32 uiNumMips);
49
52 {
54 const plImageFilter* m_filter = nullptr;
55
57 bool m_renormalizeNormals = false;
58
60 bool m_preserveCoverage = false;
61
63 float m_alphaThreshold = 0.5f;
64
66 plImageAddressMode::Enum m_addressModeU = plImageAddressMode::Clamp;
67
69 plImageAddressMode::Enum m_addressModeV = plImageAddressMode::Clamp;
70
72 plImageAddressMode::Enum m_addressModeW = plImageAddressMode::Clamp;
73
75 plColor m_borderColor = plColor::Black;
76
78 plUInt32 m_numMipMaps = 0;
79 };
80
82 static plResult Scale(const plImageView& source, plImage& ref_target, plUInt32 uiWidth, plUInt32 uiHeight, const plImageFilter* pFilter = nullptr,
83 plImageAddressMode::Enum addressModeU = plImageAddressMode::Clamp, plImageAddressMode::Enum addressModeV = plImageAddressMode::Clamp,
84 const plColor& borderColor = plColor::Black);
85
87 static plResult Scale3D(const plImageView& source, plImage& ref_target, plUInt32 uiWidth, plUInt32 uiHeight, plUInt32 uiDepth,
88 const plImageFilter* pFilter = nullptr, plImageAddressMode::Enum addressModeU = plImageAddressMode::Clamp,
89 plImageAddressMode::Enum addressModeV = plImageAddressMode::Clamp, plImageAddressMode::Enum addressModeW = plImageAddressMode::Clamp,
90 const plColor& borderColor = plColor::Black);
91
93 static void GenerateMipMaps(const plImageView& source, plImage& ref_target, const MipMapOptions& options);
94
96 static void ReconstructNormalZ(plImage& ref_source);
97
99 static void RenormalizeNormalMap(plImage& ref_image);
100
102 static void AdjustRoughness(plImage& ref_roughnessMap, const plImageView& normalMap);
103
105 static void ChangeExposure(plImage& ref_image, float fBias);
106
116 static plResult CreateCubemapFromSingleFile(plImage& ref_dstImg, const plImageView& srcImg);
117
121 static plResult CreateCubemapFrom6Files(plImage& ref_dstImg, const plImageView* pSourceImages);
122
123 static plResult CreateVolumeTextureFromSingleFile(plImage& ref_dstImg, const plImageView& srcImg);
124
125 static plUInt32 GetSampleIndex(plUInt32 uiNumTexels, plInt32 iIndex, plImageAddressMode::Enum addressMode, bool& out_bUseBorderColor);
126
131 static plColor NearestSample(const plImageView& image, plImageAddressMode::Enum addressMode, plVec2 vUv);
132
138 static plColor NearestSample(const plColor* pPixelPointer, plUInt32 uiWidth, plUInt32 uiHeight, plImageAddressMode::Enum addressMode, plVec2 vUv);
139
144 static plColor BilinearSample(const plImageView& image, plImageAddressMode::Enum addressMode, plVec2 vUv);
145
151 static plColor BilinearSample(const plColor* pPixelPointer, plUInt32 uiWidth, plUInt32 uiHeight, plImageAddressMode::Enum addressMode, plVec2 vUv);
152
157 static plResult CopyChannel(plImage& ref_dstImg, plUInt8 uiDstChannelIdx, const plImage& srcImg, plUInt8 uiSrcChannelIdx);
158
160 static void EmbedImageData(plStringBuilder& out_sHtml, const plImage& image);
161
163 static void CreateImageDiffHtml(plStringBuilder& out_sHtml, plStringView sTitle, const plImage& referenceImgRgb, const plImage& referenceImgAlpha, const plImage& capturedImgRgb, const plImage& capturedImgAlpha, const plImage& diffImgRgb, const plImage& diffImgAlpha, plUInt32 uiError, plUInt32 uiThreshold, plUInt8 uiMinDiffRgb, plUInt8 uiMaxDiffRgb, plUInt8 uiMinDiffAlpha, plUInt8 uiMaxDiffAlpha);
164};
plColor represents an RGBA color in linear color space. Values are stored as float,...
Definition Color.h:44
static const plColor Black
#000000
Definition Color.h:57
Represents a function used for filtering an image.
Definition ImageFilter.h:9
A class containing image data and associated meta data.
Definition Image.h:103
Definition ImageUtils.h:10
A class referencing image data and holding metadata about the image.
Definition Image.h:13
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
Mip map generation options.
Definition ImageUtils.h:52
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54