97 const size_t out_pixels_size,
98 const bool associate_alpha)
100 const size_t num_pixels = ((size_t)metadata.
width) * metadata.
height;
101 const int channels = metadata.
channels;
107 if (in_pixels && num_pixels * channels == out_pixels_size) {
109 memcpy(out_pixels, in_pixels, out_pixels_size *
sizeof(
float));
114 memset(out_pixels, 0, num_pixels *
sizeof(
float));
117 const size_t num_pixels_safe = out_pixels_size /
channels;
118 float *out_pixel = (
float *)out_pixels;
119 for (
int i = 0; i < num_pixels_safe; i++, out_pixel +=
channels) {
140 if (in_pixels && num_pixels * channels == out_pixels_size) {
142 const uchar *in_pixel = in_pixels;
143 half *out_pixel = (
half *)out_pixels;
144 if (associate_alpha && channels == 4) {
145 for (
size_t i = 0; i < num_pixels; i++, in_pixel += 4, out_pixel += 4) {
154 for (
size_t i = 0; i < num_pixels; i++) {
155 for (
int c = 0; c <
channels; c++, in_pixel++, out_pixel++) {
164 memset(out_pixels, 0, num_pixels *
sizeof(
half));
167 const size_t num_pixels_safe = out_pixels_size /
channels;
168 half *out_pixel = (
half *)out_pixels;
169 for (
int i = 0; i < num_pixels_safe; i++, out_pixel +=
channels) {
188 if (in_pixels && num_pixels * channels == out_pixels_size) {
190 memcpy(out_pixels, in_pixels, out_pixels_size *
sizeof(
unsigned char));
192 if (associate_alpha && channels == 4) {
194 unsigned char *out_pixel = (
unsigned char *)out_pixels;
195 for (
size_t i = 0; i < num_pixels; i++, out_pixel += 4) {
196 out_pixel[0] = (out_pixel[0] * out_pixel[3]) / 255;
197 out_pixel[1] = (out_pixel[1] * out_pixel[3]) / 255;
198 out_pixel[2] = (out_pixel[2] * out_pixel[3]) / 255;
205 memset(out_pixels, 0, out_pixels_size *
sizeof(
unsigned char));
208 const size_t num_pixels_safe = out_pixels_size /
channels;
209 unsigned char *out_pixel = (
unsigned char *)out_pixels;
210 for (
size_t i = 0; i < num_pixels_safe; i++, out_pixel +=
channels) {