我需要能够通过操作 png 文件中的像素在 c 中水平翻转图像。尽管我尝试过,但在测试时,我的算法什么也没做。我还需要能够垂直执行此操作,但这是我的水平翻转代码:
void flip_horizontal( uint8_t array[], unsigned int cols, unsigned int rows ) {
unsigned int left = 0;
unsigned int right = cols;
for(int r = 0; r < rows; r++){
while(left != right && right > left){
int temp = array[r * cols + left];
array[(r * cols) + left] = array[(r * cols) + cols - right];
array[(r * cols) + cols - right] = temp;
right--;
left++;
}
}
}
最佳答案
您忘记在处理第一行后重置 left
和 right
。
void flip_horizontal( uint8_t array[], unsigned int cols, unsigned int rows ) {
unsigned int left = 0;
unsigned int right = cols;
for(int r = 0; r < rows; r++){
while(left != right && right > left){
int temp = array[r * cols + left];
array[(r * cols) + left] = array[(r * cols) + cols - right];
array[(r * cols) + cols - right] = temp;
right--;
left++;
}
// Reset left and right after processing a row.
left = 0;
right = cols;
}
}
更新
您计算的索引有误。看看下面这行。
array[(r * cols) + left] = array[(r * cols) + cols - right];
当 left = 0
, right = cols
,
(r * cols) + left == (r * cols) + cols - right
当left = n
,right = cols - n
,并且仍然
(r * cols) + left == (r * cols) + cols - right
这就是为什么您看不到图像有任何变化的原因。
尝试:
void flip_horizontal( uint8_t array[], unsigned int cols, unsigned int rows ) {
unsigned int left = 0;
unsigned int right = cols-1;
for(int r = 0; r < rows; r++){
while(left != right && right > left){
int index1 = r * cols + left;
int index2 = r * cols + right;
int temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
right--;
left++;
}
// Reset left and right after processing a row.
left = 0;
right = cols-1;
}
}
关于c - 用 C 代码翻转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26169374/