UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ObjectThumbnail.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
7#include "CoreTypes.h"
10#include "UObject/NameTypes.h"
11#include "ImageCore.h"
12
55
56
61{
62public:
63
76
77private:
78
80 static CORE_API FThumbnailCompressionInterface* PNGThumbnailCompressor;
81 static CORE_API FThumbnailCompressionInterface* JPEGThumbnailCompressor;
82
83public:
84
87
90 {
91 return ImageWidth;
92 }
93
96 {
97 return ImageHeight;
98 }
99
102 {
103 return CompressedImageData.Num();
104 }
105
108 {
109 ImageWidth = InWidth;
110 ImageHeight = InHeight;
111 }
112
114 bool IsLoadedFromDisk(void) const { return bLoadedFromDisk; }
115
117 bool IsCreatedAfterCustomThumbsEnabled (void) const { return bCreatedAfterCustomThumbForSharedTypesEnabled; }
118
120 void SetCreatedAfterCustomThumbsEnabled(void) { bCreatedAfterCustomThumbForSharedTypesEnabled = true; }
121
123 bool IsDirty() const
124 {
125 return bIsDirty;
126 }
127
130 {
131 bIsDirty = true;
132 }
133
136 {
137 return ImageData;
138 }
139
142 {
143 return ImageData;
144 }
145
148 {
149 return CompressedImageData;
150 }
151
153 bool IsEmpty() const
154 {
155 return ImageWidth == 0 || ImageHeight == 0;
156 }
157
164 bool HasValidImageData() const
165 {
166 return !ImageData.IsEmpty() || !CompressedImageData.IsEmpty();
167 }
168
171
174
182
191 {
193 if ( Data.Num() == 0 )
194 {
195 return FImageView();
196 }
197
198 return FImageView( (void *)&Data[0],ImageWidth,ImageHeight,ERawImageFormat::BGRA8 );
199 }
200
207 {
208 // Image must be converted to BGRA8 to store in Thumbnail
209 // if Image is already BGRA8-SRGB then this is just a memcpy
210 // which is what we need anyway to copy the bytes into a new array
211 // so there is no inefficiency in just always using the FImage copy here
215 }
216
219 {
220 // change format if needed, nop if not
221 // MoveFrom is discardable so it's okay if we just change it in place
223
224 ImageWidth = Image.SizeX;
225 ImageHeight = Image.SizeY;
226 CompressedImageData.Reset();
227 bIsJPEG = false;
228 ImageData = MoveTemp(Image.RawData); // array move
229 Image.Reset();
230 }
231
233 CORE_API void Serialize(FArchive& Ar);
235
238
241
247 CORE_API void CountBytes( FArchive& Ar ) const;
248
255
262
265 {
266 if ( Ar.IsCountingMemory() )
267 {
268 Thumb.CountBytes(Ar);
269 }
270 else
271 {
272 Thumb.Serialize(Ar);
273 }
274 return Ar;
275 }
276
278 {
279 Thumb.CountBytes(Ar);
280 return Ar;
281 }
282
284 bool operator ==( const FObjectThumbnail& Other ) const
285 {
286 return ImageWidth == Other.ImageWidth
287 && ImageHeight == Other.ImageHeight
288 && bIsDirty == Other.bIsDirty
289 && CompressedImageData == Other.CompressedImageData;
290 }
291
292 bool operator !=( const FObjectThumbnail& Other ) const
293 {
294 return ImageWidth != Other.ImageWidth
295 || ImageHeight != Other.ImageHeight
296 || bIsDirty != Other.bIsDirty
297 || CompressedImageData != Other.CompressedImageData;
298 }
299
300private:
301
303 int32 ImageWidth;
304
306 int32 ImageHeight;
307
309 TArray< uint8 > CompressedImageData;
310
312 TArray< uint8 > ImageData;
313
315 bool bIsDirty;
316
318 bool bLoadedFromDisk;
319
321 bool bIsJPEG;
322
324 bool bCreatedAfterCustomThumbForSharedTypesEnabled;
325};
326
327
330
331
334{
337
340
343
346 : ObjectFullName(),
347 ObjectThumbnail( nullptr ),
348 FileOffset( 0 )
349 { }
350
357
363 CORE_API void CountBytes( FArchive& Ar ) const;
364
367 {
368 if ( Ar.IsCountingMemory() )
369 {
371 }
372 else
373 {
374 Ar << NameThumbPair.ObjectFullName << NameThumbPair.FileOffset;
375 }
376 return Ar;
377 }
378
380 {
382 return Ar;
383 }
384};
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TMap< FName, FObjectThumbnail > FThumbnailMap
Definition ObjectThumbnail.h:329
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Archive.h:1208
virtual void CountBytes(SIZE_T InNum, SIZE_T InMax)
Definition Archive.h:125
UE_FORCEINLINE_HINT bool IsCountingMemory() const
Definition Archive.h:468
Definition NameTypes.h:617
Definition ObjectThumbnail.h:61
CORE_API void DecompressImageData()
Definition ObjectThumbnail.cpp:120
static void SetThumbnailCompressors(FThumbnailCompressionInterface *InPNGThumbnailCompressor, FThumbnailCompressionInterface *InJPEGThumbnailCompressor)
Definition ObjectThumbnail.h:70
void SetImageSize(int32 InWidth, int32 InHeight)
Definition ObjectThumbnail.h:107
CORE_API void CountImageBytes_Uncompressed(FArchive &Ar) const
Definition ObjectThumbnail.cpp:185
int32 GetCompressedDataSize() const
Definition ObjectThumbnail.h:101
void SetImage(const FImageView &Image)
Definition ObjectThumbnail.h:206
int32 GetImageWidth() const
Definition ObjectThumbnail.h:89
void SetCreatedAfterCustomThumbsEnabled(void)
Definition ObjectThumbnail.h:120
CORE_API FThumbnailCompressionInterface * ChooseNewCompressor() const
Definition ObjectThumbnail.cpp:147
bool IsCreatedAfterCustomThumbsEnabled(void) const
Definition ObjectThumbnail.h:117
void MarkAsDirty()
Definition ObjectThumbnail.h:129
bool operator==(const FObjectThumbnail &Other) const
Definition ObjectThumbnail.h:284
int32 GetImageHeight() const
Definition ObjectThumbnail.h:95
void SetImage(FImage &&Image)
Definition ObjectThumbnail.h:218
CORE_API void CountBytes(FArchive &Ar) const
Definition ObjectThumbnail.cpp:168
FImageView GetImage() const
Definition ObjectThumbnail.h:190
CORE_API FThumbnailCompressionInterface * GetCompressor() const
Definition ObjectThumbnail.cpp:130
bool IsLoadedFromDisk(void) const
Definition ObjectThumbnail.h:114
bool HasValidImageData() const
Definition ObjectThumbnail.h:164
friend FArchive & operator<<(FArchive &Ar, FObjectThumbnail &Thumb)
Definition ObjectThumbnail.h:264
CORE_API void CountImageBytes_Compressed(FArchive &Ar) const
Definition ObjectThumbnail.cpp:179
CORE_API const TArray< uint8 > & GetUncompressedImageData() const
Definition ObjectThumbnail.cpp:25
const TArray< uint8 > & AccessImageData() const
Definition ObjectThumbnail.h:141
bool IsEmpty() const
Definition ObjectThumbnail.h:153
friend FArchive & operator<<(FArchive &Ar, const FObjectThumbnail &Thumb)
Definition ObjectThumbnail.h:277
TArray< uint8 > & AccessCompressedImageData()
Definition ObjectThumbnail.h:147
TArray< uint8 > & AccessImageData()
Definition ObjectThumbnail.h:135
bool IsDirty() const
Definition ObjectThumbnail.h:123
bool operator!=(const FObjectThumbnail &Other) const
Definition ObjectThumbnail.h:292
CORE_API void CompressImageData()
Definition ObjectThumbnail.cpp:101
CORE_API FObjectThumbnail()
Definition ObjectThumbnail.cpp:15
Definition StructuredArchiveSlots.h:52
Definition ObjectThumbnail.h:18
virtual FName GetThumbnailCompressorName() const =0
virtual bool CompressImage(const TArray< uint8 > &InUncompressedData, const int32 InWidth, const int32 InHeight, TArray< uint8 > &OutCompressedData)=0
virtual bool IsLosslessCompression() const =0
virtual bool DecompressImage(const TArray< uint8 > &InCompressedData, const int32 InWidth, const int32 InHeight, TArray< uint8 > &OutUncompressedData)=0
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
Definition UnrealString.h.inl:34
@ BGRA8
Definition ImageCore.h:59
Definition ImageCore.h:264
Definition ImageCore.h:416
IMAGECORE_API void CopyTo(FImage &DestImage, ERawImageFormat::Type DestFormat, EGammaSpace DestGammaSpace) const
Definition ImageCore.cpp:1016
Definition ObjectThumbnail.h:334
int32 FileOffset
Definition ObjectThumbnail.h:342
CORE_API void CountBytes(FArchive &Ar) const
Definition ObjectThumbnail.cpp:191
friend FArchive & operator<<(FArchive &Ar, const FObjectFullNameAndThumbnail &NameThumbPair)
Definition ObjectThumbnail.h:379
FName ObjectFullName
Definition ObjectThumbnail.h:336
const FObjectThumbnail * ObjectThumbnail
Definition ObjectThumbnail.h:339
FObjectFullNameAndThumbnail()
Definition ObjectThumbnail.h:345
friend FArchive & operator<<(FArchive &Ar, FObjectFullNameAndThumbnail &NameThumbPair)
Definition ObjectThumbnail.h:366
FObjectFullNameAndThumbnail(const FName InFullName, const FObjectThumbnail *InThumbnail)
Definition ObjectThumbnail.h:352