结构中变量的赋值操作不起作用
Assignment operation on variable in struct not working
我正在写一个c程序,已经调试了几天了。我想我已经找到问题了。
这是一段代码和结果输出:
// now setting the new RGB values
int blue_val = (long) round(sqrt(((gx_b * gx_b) + (gy_b * gy_b))));
temp[pixel_i][pixel_j].rgbtBlue = blue_val;
printf("%i %i\n", blue_val, temp[pixel_i][pixel_j].rgbtBlue);
这是输出:
322 66
396 140
322 66
262 6
60 60
295 39
322 66
385 129
322 66
注意:我还设置了绿色和红色值,它们在结构中写得很好。它只是我在这里打印的蓝色值,由于某种原因没有被写入。为了更清晰的画面,这里是后面的代码的其余部分:
temp[pixel_i][pixel_j].rgbtGreen = (long) round(sqrt(((gx_g * gx_g) + (gy_g * gy_g))));
temp[pixel_i][pixel_j].rgbtRed = (long) round(sqrt(((gx_r * gx_r) + (gy_r * gy_r))));
if (temp[pixel_i][pixel_j].rgbtBlue > 255)
temp[pixel_i][pixel_j].rgbtBlue = 255;
if (temp[pixel_i][pixel_j].rgbtGreen > 255)
temp[pixel_i][pixel_j].rgbtGreen = 255;
if (temp[pixel_i][pixel_j].rgbtRed > 255)
temp[pixel_i][pixel_j].rgbtRed = 255;
// printf("R:%i G:%i B:%i\n", temp[pixel_i][pixel_j].rgbtRed, temp[pixel_i][pixel_j].rgbtGreen, temp[pixel_i][pixel_j].rgbtBlue);
return;
问题是 struct rgbtBlue 中的变量是 BYTE 类型,因此不允许分配大于 255 的值。
解决方案:
// now setting the new RGB values taking care to assign 255 for values greater than 255
int bval = (int) round(sqrt(((gx_b * gx_b) + (gy_b * gy_b))));
temp[pixel_i][pixel_j].rgbtBlue = (bval > 255) ? 255 : bval;
int gval = (int) round(sqrt(((gx_g * gx_g) + (gy_g * gy_g))));
temp[pixel_i][pixel_j].rgbtGreen = (gval > 255) ? 255 : gval;
int rval = (int) round(sqrt(((gx_r * gx_r) + (gy_r * gy_r))));
temp[pixel_i][pixel_j].rgbtRed = (rval > 255) ? 255 : rval;
发帖几秒后想通了..
我正在写一个c程序,已经调试了几天了。我想我已经找到问题了。
这是一段代码和结果输出:
// now setting the new RGB values
int blue_val = (long) round(sqrt(((gx_b * gx_b) + (gy_b * gy_b))));
temp[pixel_i][pixel_j].rgbtBlue = blue_val;
printf("%i %i\n", blue_val, temp[pixel_i][pixel_j].rgbtBlue);
这是输出:
322 66
396 140
322 66
262 6
60 60
295 39
322 66
385 129
322 66
注意:我还设置了绿色和红色值,它们在结构中写得很好。它只是我在这里打印的蓝色值,由于某种原因没有被写入。为了更清晰的画面,这里是后面的代码的其余部分:
temp[pixel_i][pixel_j].rgbtGreen = (long) round(sqrt(((gx_g * gx_g) + (gy_g * gy_g))));
temp[pixel_i][pixel_j].rgbtRed = (long) round(sqrt(((gx_r * gx_r) + (gy_r * gy_r))));
if (temp[pixel_i][pixel_j].rgbtBlue > 255)
temp[pixel_i][pixel_j].rgbtBlue = 255;
if (temp[pixel_i][pixel_j].rgbtGreen > 255)
temp[pixel_i][pixel_j].rgbtGreen = 255;
if (temp[pixel_i][pixel_j].rgbtRed > 255)
temp[pixel_i][pixel_j].rgbtRed = 255;
// printf("R:%i G:%i B:%i\n", temp[pixel_i][pixel_j].rgbtRed, temp[pixel_i][pixel_j].rgbtGreen, temp[pixel_i][pixel_j].rgbtBlue);
return;
问题是 struct rgbtBlue 中的变量是 BYTE 类型,因此不允许分配大于 255 的值。
解决方案:
// now setting the new RGB values taking care to assign 255 for values greater than 255
int bval = (int) round(sqrt(((gx_b * gx_b) + (gy_b * gy_b))));
temp[pixel_i][pixel_j].rgbtBlue = (bval > 255) ? 255 : bval;
int gval = (int) round(sqrt(((gx_g * gx_g) + (gy_g * gy_g))));
temp[pixel_i][pixel_j].rgbtGreen = (gval > 255) ? 255 : gval;
int rval = (int) round(sqrt(((gx_r * gx_r) + (gy_r * gy_r))));
temp[pixel_i][pixel_j].rgbtRed = (rval > 255) ? 255 : rval;
发帖几秒后想通了..