在处理重复代码(复制/粘贴)时,很容易出现无意的失明。
敏锐的读者看到
二
的实例
sepiaRed = round((...
你要小心。。。
既然你看到了bug,再看看什么是好的&坏消息正试图告诉你。注意值的位置
39
出现?注意值
0
在中
蓝色
频道
试着写更多
契约
代码,并使用简化水平和垂直扫描的布局和变量名:
// Convert image to sepia
void sepia( int height, int width, RGBTRIPLE image[height][width] ) {
for ( int i = 0; i < height; i++ ) {
for ( int j = 0; j < width; j++ ) {
int red = image[i][j].rgbtRed;
int grn = image[i][j].rgbtGreen;
int blu = image[i][j].rgbtBlue;
int sred = round((.393 * red) + (.769 * grn) + (.189 * blu));
int sgrn = round((.349 * red) + (.686 * grn) + (.168 * blu));
int sblu = round((.272 * red) + (.534 * grn) + (.131 * blu));
image[i][j].rgbtRed = (sred > 255) ? 255 : sred;
image[i][j].rgbtGreen = (sgrn > 255) ? 255 : sgrn;
image[i][j].rgbtBlue = (sblu > 255) ? 255 : sblu;
}
}
}