18 const size_t components,
22 const size_t index = ((size_t)
y * width + (size_t)
x) * components;
23 return &pixels[index];
30 const size_t components,
31 const size_t kernel_size,
37 const size_t ix = (size_t)
x;
38 const size_t iy = (size_t)
y;
42 for (
size_t dy = 0; dy < kernel_size; ++dy) {
43 for (
size_t dx = 0; dx < kernel_size; ++dx) {
44 const size_t nx = ix + dx;
45 const size_t ny = iy + dy;
46 if (nx >= width || ny >= height) {
50 for (
size_t k = 0; k < components; ++k) {
58 for (
size_t k = 0; k < components; ++k) {
63 for (
size_t k = 0; k < components; ++k) {
71 const size_t input_width,
72 const size_t input_height,
73 const size_t components,
74 const float inv_scale_factor,
75 const size_t output_width,
76 const size_t output_height,
79 const size_t kernel_size = (size_t)(inv_scale_factor + 0.5f);
80 for (
size_t y = 0;
y < output_height; ++
y) {
81 for (
size_t x = 0;
x < output_width; ++
x) {
82 const float input_x = (
float)
x * inv_scale_factor;
83 const float input_y = (
float)
y * inv_scale_factor;
84 const size_t output_index = (
y * output_width +
x) * components;
92 &output_pixels->at(output_index));
101 const size_t input_width,
102 const size_t input_height,
103 const size_t components,
104 const float scale_factor,
106 size_t *output_width,
107 size_t *output_height)
110 if (scale_factor == 1.0f) {
111 *output_width = input_width;
112 *output_height = input_height;
113 *output_pixels = input_pixels;
120 *output_width =
max((
size_t)((
float)input_width * scale_factor), (
size_t)1);
121 *output_height =
max((
size_t)((
float)input_height * scale_factor), (
size_t)1);
123 const size_t num_output_pixels = ((*output_width) * (*output_height)) * components;
124 output_pixels->resize(num_output_pixels);
125 if (scale_factor < 1.0f) {
126 const float inv_scale_factor = 1.0f / scale_factor;
127 util_image_downscale_pixels(input_pixels,
T util_image_cast_from_float(const float value)
float util_image_cast_to_float(T value)
#define CCL_NAMESPACE_END
#define assert(assertion)
void util_image_resize_pixels(const vector< T > &input_pixels, const size_t input_width, const size_t input_height, const size_t components, const float scale_factor, vector< T > *output_pixels, size_t *output_width, size_t *output_height)
void util_image_downscale_sample(const vector< T > &pixels, const size_t width, const size_t height, const size_t components, const size_t kernel_size, const float x, const float y, T *result)
void util_image_downscale_pixels(const vector< T > &input_pixels, const size_t input_width, const size_t input_height, const size_t components, const float inv_scale_factor, const size_t output_width, const size_t output_height, vector< T > *output_pixels)
const T * util_image_read(const vector< T > &pixels, const size_t width, const size_t, const size_t components, const size_t x, const size_t y)