Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarImageProcessing.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-05-03 08:53:44 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2024-05-03 08:53:44 +1000
commit95f6babd5e2ccc66bf7e97f74f804ddac4cf2fef (patch)
tree595c5cff8fa10c16d09be8dd174d707cfb99b199 /source/core/StarImageProcessing.cpp
parentde3d099d51126f27d553e6b33ba47e0825a3a01a (diff)
scaling functions now warn instead of crashing with negative scales
Diffstat (limited to 'source/core/StarImageProcessing.cpp')
-rw-r--r--source/core/StarImageProcessing.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/source/core/StarImageProcessing.cpp b/source/core/StarImageProcessing.cpp
index b803470..6d2c51d 100644
--- a/source/core/StarImageProcessing.cpp
+++ b/source/core/StarImageProcessing.cpp
@@ -6,12 +6,15 @@
#include "StarImage.hpp"
#include "StarStringView.hpp"
#include "StarEncode.hpp"
-//#include "StarTime.hpp"
-//#include "StarLogging.hpp"
+#include "StarLogging.hpp"
namespace Star {
-Image scaleNearest(Image const& srcImage, Vec2F const& scale) {
+Image scaleNearest(Image const& srcImage, Vec2F scale) {
+ if (scale[0] < 0.0f || scale[1] < 0.0f) {
+ Logger::warn("Negative scale in scaleNearest({})", scale);
+ scale = scale.piecewiseMax(Vec2F::filled(0.f));
+ }
Vec2U srcSize = srcImage.size();
Vec2U destSize = Vec2U::round(vmult(Vec2F(srcSize), scale));
destSize[0] = max(destSize[0], 1u);
@@ -26,7 +29,11 @@ Image scaleNearest(Image const& srcImage, Vec2F const& scale) {
return destImage;
}
-Image scaleBilinear(Image const& srcImage, Vec2F const& scale) {
+Image scaleBilinear(Image const& srcImage, Vec2F scale) {
+ if (scale[0] < 0.0f || scale[1] < 0.0f) {
+ Logger::warn("Negative scale in scaleBilinear({})", scale);
+ scale = scale.piecewiseMax(Vec2F::filled(0.f));
+ }
Vec2U srcSize = srcImage.size();
Vec2U destSize = Vec2U::round(vmult(Vec2F(srcSize), scale));
destSize[0] = max(destSize[0], 1u);
@@ -50,7 +57,11 @@ Image scaleBilinear(Image const& srcImage, Vec2F const& scale) {
return destImage;
}
-Image scaleBicubic(Image const& srcImage, Vec2F const& scale) {
+Image scaleBicubic(Image const& srcImage, Vec2F scale) {
+ if (scale[0] < 0.0f || scale[1] < 0.0f) {
+ Logger::warn("Negative scale in scaleBicubic({})", scale);
+ scale = scale.piecewiseMax(Vec2F::filled(0.f));
+ }
Vec2U srcSize = srcImage.size();
Vec2U destSize = Vec2U::round(vmult(Vec2F(srcSize), scale));
destSize[0] = max(destSize[0], 1u);