Skip to content

Commit af9951a

Browse files
vtfpp: swap explicit sizing out for clamped bounds to actually work with my damn use case
1 parent 03adbed commit af9951a

11 files changed

Lines changed: 135 additions & 36 deletions

File tree

include/vtfpp/ImageConversion.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,20 @@ enum class ResizeMethod {
398398
POWER_OF_TWO_NEAREST,
399399
};
400400

401+
struct ResizeBounds {
402+
uint16_t resizeMinWidth = 0;
403+
uint16_t resizeMaxWidth = 0;
404+
uint16_t resizeMinHeight = 0;
405+
uint16_t resizeMaxHeight = 0;
406+
407+
ResizeBounds() = default;
408+
explicit ResizeBounds(uint16_t size) : resizeMinWidth{size}, resizeMaxWidth{size}, resizeMinHeight{size}, resizeMaxHeight{size} {}
409+
ResizeBounds(uint16_t width, uint16_t height) : resizeMinWidth{width}, resizeMaxWidth{width}, resizeMinHeight{height}, resizeMaxHeight{height} {}
410+
ResizeBounds(uint16_t minWidth, uint16_t maxWidth, uint16_t minHeight, uint16_t maxHeight) : resizeMinWidth{minWidth}, resizeMaxWidth{maxWidth}, resizeMinHeight{minHeight}, resizeMaxHeight{maxHeight} {}
411+
412+
[[nodiscard]] std::pair<uint16_t, uint16_t> clamp(uint16_t width, uint16_t height) const;
413+
};
414+
401415
/// Get the new image size given a resize method
402416
[[nodiscard]] uint16_t getResizedDim(uint16_t n, ResizeMethod method);
403417

include/vtfpp/VTF.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,7 @@ class VTF {
239239
ImageConversion::ResizeMethod heightResizeMethod = ImageConversion::ResizeMethod::POWER_OF_TWO_BIGGER;
240240
ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT;
241241
uint32_t flags = 0;
242-
uint16_t requestedResizeWidth = 0;
243-
uint16_t requestedResizeHeight = 0;
242+
ImageConversion::ResizeBounds resizeBounds;
244243
uint16_t initialFrameCount = 1;
245244
uint16_t startFrame = 0;
246245
bool isCubeMap = false;
@@ -447,7 +446,7 @@ class VTF {
447446

448447
bool setImage(std::span<const std::byte> imageData_, ImageFormat format_, uint16_t width_, uint16_t height_, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
449448

450-
bool setImage(const std::filesystem::path& imagePath, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY, uint16_t requestedResizeWidth = 0, uint16_t requestedResizeHeight = 0);
449+
bool setImage(const std::filesystem::path& imagePath, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY, ImageConversion::ResizeBounds resizeBounds = {});
451450

452451
[[nodiscard]] std::vector<std::byte> saveImageToFile(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
453452

lang/c/include/vtfppc/ImageConversion.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,20 @@ VTFPP_EXTERN typedef enum {
6262
VTFPP_IMAGE_CONVERSION_RESIZE_METHOD_POWER_OF_TWO_NEAREST,
6363
} vtfpp_image_conversion_resize_method_e;
6464

65+
VTFPP_EXTERN typedef struct {
66+
uint16_t resizeMinWidth;
67+
uint16_t resizeMaxWidth;
68+
uint16_t resizeMinHeight;
69+
uint16_t resizeMaxHeight;
70+
} vtfpp_image_conversion_resize_bounds_t;
71+
72+
#define VTFPP_IMAGE_CONVERSION_RESIZE_BOUNDS_DEFAULT (SOURCEPP_CAST_CTOR(vtfpp_image_conversion_resize_bounds_t) { \
73+
.resizeMinWidth = 0, \
74+
.resizeMaxWidth = 0, \
75+
.resizeMinHeight = 0, \
76+
.resizeMaxHeight = 0, \
77+
})
78+
6579
VTFPP_API uint16_t vtfpp_image_conversion_get_resized_dim(uint16_t n, vtfpp_image_conversion_resize_method_e method);
6680
VTFPP_API void vtfpp_image_conversion_set_resized_dims(uint16_t* width, vtfpp_image_conversion_resize_method_e widthResize, uint16_t* height, vtfpp_image_conversion_resize_method_e heightResize);
6781
VTFPP_API sourcepp_buffer_t vtfpp_image_conversion_resize_image_data(const unsigned char* buffer, size_t bufferLen, vtfpp_image_format_e format, uint16_t width, uint16_t newWidth, uint16_t height, uint16_t newHeight, int srgb, vtfpp_image_conversion_resize_filter_e filter, vtfpp_image_conversion_resize_edge_e edge); // REQUIRES MANUAL FREE: sourcepp_buffer_free
@@ -191,6 +205,24 @@ inline vtfpp_image_conversion_resize_method_e cast(vtfpp::ImageConversion::Resiz
191205
return VTFPP_IMAGE_CONVERSION_RESIZE_METHOD_NONE;
192206
}
193207

208+
inline vtfpp_image_conversion_resize_bounds_t cast(vtfpp::ImageConversion::ResizeBounds value) {
209+
return {
210+
.resizeMinWidth = value.resizeMinWidth,
211+
.resizeMaxWidth = value.resizeMaxWidth,
212+
.resizeMinHeight = value.resizeMinHeight,
213+
.resizeMaxHeight = value.resizeMaxHeight,
214+
};
215+
}
216+
217+
inline vtfpp::ImageConversion::ResizeBounds cast(vtfpp_image_conversion_resize_bounds_t value) {
218+
return {
219+
.resizeMinWidth = value.resizeMinWidth,
220+
.resizeMaxWidth = value.resizeMaxWidth,
221+
.resizeMinHeight = value.resizeMinHeight,
222+
.resizeMaxHeight = value.resizeMaxHeight,
223+
};
224+
}
225+
194226
} // namespace sourceppc::convert
195227

196228
#endif

lang/c/include/vtfppc/VTF.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,7 @@ VTFPP_EXTERN typedef struct {
154154
vtfpp_image_conversion_resize_method_e heightResizeMethod;
155155
vtfpp_image_conversion_resize_filter_e filter;
156156
uint32_t flags;
157-
uint16_t requestedResizeWidth;
158-
uint16_t requestedResizeHeight;
157+
vtfpp_image_conversion_resize_bounds_t resizeBounds;
159158
uint16_t initialFrameCount;
160159
uint16_t startFrame;
161160
int isCubeMap;
@@ -183,8 +182,7 @@ VTFPP_EXTERN typedef struct {
183182
.heightResizeMethod = VTFPP_IMAGE_CONVERSION_RESIZE_METHOD_POWER_OF_TWO_BIGGER, \
184183
.filter = VTFPP_IMAGE_CONVERSION_RESIZE_FILTER_DEFAULT, \
185184
.flags = 0, \
186-
.requestedResizeWidth = 0, \
187-
.requestedResizeHeight = 0, \
185+
.resizeBounds = VTFPP_IMAGE_CONVERSION_RESIZE_BOUNDS_DEFAULT, \
188186
.initialFrameCount = 1, \
189187
.startFrame = 0, \
190188
.isCubeMap = 0, \
@@ -291,7 +289,7 @@ VTFPP_API const unsigned char* vtfpp_vtf_get_image_data_raw(vtfpp_vtf_handle_t h
291289
VTFPP_API sourcepp_buffer_t vtfpp_vtf_get_image_data_as(vtfpp_vtf_handle_t handle, vtfpp_image_format_e format, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice); // REQUIRES MANUAL FREE: sourcepp_buffer_free
292290
VTFPP_API sourcepp_buffer_t vtfpp_vtf_get_image_data_as_rgba8888(vtfpp_vtf_handle_t handle, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice); // REQUIRES MANUAL FREE: sourcepp_buffer_free
293291
VTFPP_API int vtfpp_vtf_set_image_from_mem(vtfpp_vtf_handle_t handle, const unsigned char* imageData, size_t imageLen, vtfpp_image_format_e format, uint16_t width, uint16_t height, vtfpp_image_conversion_resize_filter_e filter, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice, float quality);
294-
VTFPP_API int vtfpp_vtf_set_image_from_file(vtfpp_vtf_handle_t handle, const char* imagePath, vtfpp_image_conversion_resize_filter_e filter, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice, float quality, uint16_t requestedResizeWidth, uint16_t requestedResizeHeight);
292+
VTFPP_API int vtfpp_vtf_set_image_from_file(vtfpp_vtf_handle_t handle, const char* imagePath, vtfpp_image_conversion_resize_filter_e filter, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice, float quality, vtfpp_image_conversion_resize_bounds_t resizeBounds);
295293
VTFPP_API int vtfpp_vtf_save_image_to_file(vtfpp_vtf_handle_t handle, const char* imagePath, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice, vtfpp_image_conversion_file_format_e fileFormat);
296294
VTFPP_API int vtfpp_vtf_has_thumbnail_data(vtfpp_vtf_handle_t handle);
297295
VTFPP_API const unsigned char* vtfpp_vtf_get_thumbnail_data_raw(vtfpp_vtf_handle_t handle, size_t* imageLen);
@@ -425,8 +423,7 @@ inline vtfpp::VTF::CreationOptions cast(const vtfpp_vtf_creation_options_t& valu
425423
.heightResizeMethod = cast(value.heightResizeMethod),
426424
.filter = cast(value.filter),
427425
.flags = value.flags,
428-
.requestedResizeWidth = value.requestedResizeWidth,
429-
.requestedResizeHeight = value.requestedResizeHeight,
426+
.resizeBounds = cast(value.resizeBounds),
430427
.initialFrameCount = value.initialFrameCount,
431428
.startFrame = value.startFrame,
432429
.isCubeMap = static_cast<bool>(value.isCubeMap),
@@ -454,8 +451,7 @@ inline vtfpp_vtf_creation_options_t cast(const vtfpp::VTF::CreationOptions& valu
454451
.heightResizeMethod = cast(value.heightResizeMethod),
455452
.filter = cast(value.filter),
456453
.flags = value.flags,
457-
.requestedResizeWidth = value.requestedResizeWidth,
458-
.requestedResizeHeight = value.requestedResizeHeight,
454+
.resizeBounds = cast(value.resizeBounds),
459455
.initialFrameCount = value.initialFrameCount,
460456
.startFrame = value.startFrame,
461457
.isCubeMap = value.isCubeMap,

lang/c/src/vtfppc/VTF.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -653,11 +653,11 @@ VTFPP_API int vtfpp_vtf_set_image_from_mem(vtfpp_vtf_handle_t handle, const unsi
653653
return convert::handle<VTF>(handle)->setImage({reinterpret_cast<const std::byte*>(imageData), imageLen}, convert::cast(format), width, height, convert::cast(filter), mip, frame, face, slice, quality);
654654
}
655655

656-
VTFPP_API int vtfpp_vtf_set_image_from_file(vtfpp_vtf_handle_t handle, const char* imagePath, vtfpp_image_conversion_resize_filter_e filter, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice, float quality, uint16_t requestedResizeWidth, uint16_t requestedResizeHeight) {
656+
VTFPP_API int vtfpp_vtf_set_image_from_file(vtfpp_vtf_handle_t handle, const char* imagePath, vtfpp_image_conversion_resize_filter_e filter, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice, float quality, vtfpp_image_conversion_resize_bounds_t resizeBounds) {
657657
SOURCEPP_EARLY_RETURN_VAL(handle, false);
658658
SOURCEPP_EARLY_RETURN_VAL(imagePath, false);
659659

660-
return convert::handle<VTF>(handle)->setImage(imagePath, convert::cast(filter), mip, frame, face, slice, quality, requestedResizeWidth, requestedResizeHeight);
660+
return convert::handle<VTF>(handle)->setImage(imagePath, convert::cast(filter), mip, frame, face, slice, quality, convert::cast(resizeBounds));
661661
}
662662

663663
VTFPP_API int vtfpp_vtf_save_image_to_file(vtfpp_vtf_handle_t handle, const char* imagePath, uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice, vtfpp_image_conversion_file_format_e fileFormat) {

lang/csharp/src/vtfpp/DLL.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,7 @@ internal static partial class DLL
728728
public static partial int vtfpp_vtf_set_image_from_mem(nint handle, ReadOnlySpan<byte> imageData, ulong imageLen, ImageFormat format, ushort width, ushort height, ImageConversion.ResizeFilter filter, byte mip, ushort frame, byte face, ushort slice, float quality);
729729

730730
[LibraryImport(Name, StringMarshalling = StringMarshalling.Utf8)]
731-
public static partial int vtfpp_vtf_set_image_from_file(nint handle, string imagePath, ImageConversion.ResizeFilter filter, byte mip, ushort frame, byte face, ushort slice, float quality, ushort requestedResizeWidth, ushort requestedResizeHeight);
731+
public static partial int vtfpp_vtf_set_image_from_file(nint handle, string imagePath, ImageConversion.ResizeFilter filter, byte mip, ushort frame, byte face, ushort slice, float quality, ImageConversion.ResizeBounds resizeBounds);
732732

733733
[LibraryImport(Name, StringMarshalling = StringMarshalling.Utf8)]
734734
public static partial int vtfpp_vtf_save_image_to_file(nint handle, string imagePath, byte mip, ushort frame, byte face, ushort slice, ImageConversion.FileFormat fileFormat);

lang/csharp/src/vtfpp/ImageConversion.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Runtime.InteropServices;
23

34
namespace sourcepp.vtfpp;
45

@@ -74,6 +75,43 @@ public enum ResizeMethod {
7475
POWER_OF_TWO_NEAREST,
7576
}
7677

78+
[StructLayout(LayoutKind.Sequential)]
79+
public struct ResizeBounds
80+
{
81+
public ushort ResizeMinWidth = 0;
82+
public ushort ResizeMaxWidth = 0;
83+
public ushort ResizeMinHeight = 0;
84+
public ushort ResizeMaxHeight = 0;
85+
86+
public ResizeBounds()
87+
{
88+
}
89+
90+
public ResizeBounds(ushort size)
91+
{
92+
ResizeMinWidth = size;
93+
ResizeMaxWidth = size;
94+
ResizeMinHeight = size;
95+
ResizeMaxHeight = size;
96+
}
97+
98+
public ResizeBounds(ushort width, ushort height)
99+
{
100+
ResizeMinWidth = width;
101+
ResizeMaxWidth = width;
102+
ResizeMinHeight = height;
103+
ResizeMaxHeight = height;
104+
}
105+
106+
public ResizeBounds(ushort minWidth, ushort maxWidth, ushort minHeight, ushort maxHeight)
107+
{
108+
ResizeMinWidth = minWidth;
109+
ResizeMaxWidth = maxWidth;
110+
ResizeMinHeight = minHeight;
111+
ResizeMaxHeight = maxHeight;
112+
}
113+
}
114+
77115
public static ushort GetResizedDim(ushort n, ResizeMethod method)
78116
{
79117
return DLL.vtfpp_image_conversion_get_resized_dim(n, method);

lang/csharp/src/vtfpp/VTF.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,8 @@ public struct CreationOptions()
238238
public ImageConversion.ResizeMethod WidthResizeMethod = ImageConversion.ResizeMethod.POWER_OF_TWO_BIGGER;
239239
public ImageConversion.ResizeMethod HeightResizeMethod = ImageConversion.ResizeMethod.POWER_OF_TWO_BIGGER;
240240
public ImageConversion.ResizeFilter Filter = ImageConversion.ResizeFilter.DEFAULT;
241-
public Flags VTFFlags = 0;
242-
public ushort RequestedResizeWidth = 0;
243-
public ushort RequestedResizeHeight = 0;
241+
public Flags Flags = 0;
242+
public ImageConversion.ResizeBounds ResizeBounds = default;
244243
public ushort InitialFrameCount = 1;
245244
public ushort StartFrame = 0;
246245
public int IsCubeMap = 0;
@@ -807,10 +806,10 @@ public bool SetImage(ReadOnlySpan<byte> imageData, ImageFormat format, ushort wi
807806
return Convert.ToBoolean(DLL.vtfpp_vtf_set_image_from_mem(Handle, imageData, (ulong) imageData.Length, format, width, height, filter, mip, frame, face, slice, quality));
808807
}
809808

810-
public bool SetImage(string imagePath, ImageConversion.ResizeFilter filter = ImageConversion.ResizeFilter.DEFAULT, byte mip = 0, ushort frame = 0, byte face = 0, ushort slice = 0, float quality = ImageConversion.DEFAULT_COMPRESSED_QUALITY, ushort requestedResizeWidth = 0, ushort requestedResizeHeight = 0)
809+
public bool SetImage(string imagePath, ImageConversion.ResizeFilter filter = ImageConversion.ResizeFilter.DEFAULT, byte mip = 0, ushort frame = 0, byte face = 0, ushort slice = 0, float quality = ImageConversion.DEFAULT_COMPRESSED_QUALITY, ImageConversion.ResizeBounds resizeBounds = default)
811810
{
812811
ThrowIfDisposed();
813-
return Convert.ToBoolean(DLL.vtfpp_vtf_set_image_from_file(Handle, imagePath, filter, mip, frame, face, slice, quality, requestedResizeWidth, requestedResizeHeight));
812+
return Convert.ToBoolean(DLL.vtfpp_vtf_set_image_from_file(Handle, imagePath, filter, mip, frame, face, slice, quality, resizeBounds));
814813
}
815814

816815
public bool SaveImageToFile(string imagePath, byte mip = 0, ushort frame = 0, byte face = 0, ushort slice = 0, ImageConversion.FileFormat fileFormat = ImageConversion.FileFormat.DEFAULT)

lang/python/src/vtfpp.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,17 @@ inline void register_python(py::module_& m) {
238238
.value("POWER_OF_TWO_SMALLER", ResizeMethod::POWER_OF_TWO_SMALLER)
239239
.value("POWER_OF_TWO_NEAREST", ResizeMethod::POWER_OF_TWO_NEAREST);
240240

241+
py::class_<ResizeBounds>(ImageConversion, "ResizeBounds")
242+
.def(py::init())
243+
.def(py::init<uint16_t>())
244+
.def(py::init<uint16_t, uint16_t>())
245+
.def(py::init<uint16_t, uint16_t, uint16_t, uint16_t>())
246+
.def_rw("resize_min_width", &ResizeBounds::resizeMinWidth)
247+
.def_rw("resize_max_width", &ResizeBounds::resizeMaxWidth)
248+
.def_rw("resize_min_height", &ResizeBounds::resizeMinHeight)
249+
.def_rw("resize_max_height", &ResizeBounds::resizeMaxHeight)
250+
.def("clamp", &ResizeBounds::clamp, "width"_a, "height"_a);
251+
241252
ImageConversion.def("get_resized_dim", &getResizedDim, "n"_a, "resize_method"_a);
242253
ImageConversion.def("get_resized_dims", [](uint16_t width, ResizeMethod widthResize, uint16_t height, ResizeMethod heightResize) -> std::pair<uint16_t, uint16_t> {
243254
setResizedDims(width, widthResize, height, heightResize);
@@ -579,8 +590,7 @@ inline void register_python(py::module_& m) {
579590
.def_rw("height_resize_method", &VTF::CreationOptions::heightResizeMethod)
580591
.def_rw("filter", &VTF::CreationOptions::filter)
581592
.def_rw("flags", &VTF::CreationOptions::flags)
582-
.def_rw("requested_resize_width", &VTF::CreationOptions::requestedResizeWidth)
583-
.def_rw("requested_resize_height", &VTF::CreationOptions::requestedResizeHeight)
593+
.def_rw("resize_bounds", &VTF::CreationOptions::resizeBounds)
584594
.def_rw("initial_frame_count", &VTF::CreationOptions::initialFrameCount)
585595
.def_rw("start_frame", &VTF::CreationOptions::startFrame)
586596
.def_rw("is_cubemap", &VTF::CreationOptions::isCubeMap)
@@ -707,7 +717,7 @@ inline void register_python(py::module_& m) {
707717
.def("set_image", [](VTF& self, const py::bytes& imageData, ImageFormat format, uint16_t width, uint16_t height, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY) {
708718
return self.setImage({static_cast<const std::byte*>(imageData.data()), imageData.size()}, format, width, height, filter, mip, frame, face, slice, quality);
709719
}, "image_data"_a, "format"_a, "width"_a, "height"_a, "filter"_a, "mip"_a = 0, "frame"_a = 0, "face"_a = 0, "slice"_a = 0, "quality"_a = ImageConversion::DEFAULT_COMPRESSED_QUALITY)
710-
.def("set_image_from_file", py::overload_cast<const std::filesystem::path&, ImageConversion::ResizeFilter, uint8_t, uint16_t, uint8_t, uint16_t, float, uint16_t, uint16_t>(&VTF::setImage), "image_path"_a, "filter"_a = ImageConversion::ResizeFilter::DEFAULT, "mip"_a = 0, "frame"_a = 0, "face"_a = 0, "slice"_a = 0, "quality"_a = ImageConversion::DEFAULT_COMPRESSED_QUALITY, "requested_resize_width"_a = 0, "requested_resize_height"_a = 0)
720+
.def("set_image_from_file", py::overload_cast<const std::filesystem::path&, ImageConversion::ResizeFilter, uint8_t, uint16_t, uint8_t, uint16_t, float, ImageConversion::ResizeBounds>(&VTF::setImage), "image_path"_a, "filter"_a = ImageConversion::ResizeFilter::DEFAULT, "mip"_a = 0, "frame"_a = 0, "face"_a = 0, "slice"_a = 0, "quality"_a = ImageConversion::DEFAULT_COMPRESSED_QUALITY, "resize_bounds"_a = ImageConversion::ResizeBounds{})
711721
.def("save_image", [](const VTF& self, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) {
712722
const auto d = self.saveImageToFile(mip, frame, face, slice, fileFormat);
713723
return py::bytes{d.data(), d.size()};

src/vtfpp/ImageConversion.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1963,6 +1963,22 @@ std::vector<std::byte> ImageConversion::convertFileToImageData(std::span<const s
19631963
return {reinterpret_cast<std::byte*>(stbImage.get()), reinterpret_cast<std::byte*>(stbImage.get()) + ImageFormatDetails::getDataLength(format, width, height)};
19641964
}
19651965

1966+
std::pair<uint16_t, uint16_t> ImageConversion::ResizeBounds::clamp(uint16_t width, uint16_t height) const {
1967+
if (this->resizeMinWidth) {
1968+
width = std::max(width, this->resizeMinWidth);
1969+
}
1970+
if (this->resizeMaxWidth) {
1971+
width = std::min(width, this->resizeMaxWidth);
1972+
}
1973+
if (this->resizeMinHeight) {
1974+
height = std::max(height, this->resizeMinHeight);
1975+
}
1976+
if (this->resizeMaxHeight) {
1977+
height = std::min(height, this->resizeMaxHeight);
1978+
}
1979+
return {width, height};
1980+
}
1981+
19661982
uint16_t ImageConversion::getResizedDim(uint16_t n, ResizeMethod method) {
19671983
switch (method) {
19681984
case ResizeMethod::NONE: break;

0 commit comments

Comments
 (0)