arrays的水平变换(2D)
水平和/或垂直翻转图像很简单。 前提是给定一个通过导入图片创建的2D整数数组,我必须创建一个带有int [] []参数的方法,并在返回void之前将其水平翻转。
语法如下:
public static void horizontalFlip(int[][] imgArray) { int temp; for (int i = 0; i < imgArray.length; i++) { for (int j = 0; j < imgArray[i].length / 2; j++) { temp = imgArray[i][j]; imgArray[i][j] = imgArray[imgArray.length - 1 - i][j]; imgArray[imgArray.length - 1 - i][j] = temp; } } }
我使用imgArray作为数组参数,并使用temp作为占位符,而循环交换像素,或者更确切地说,这是意图。 目前,在提示翻转后窗口什么都不做。 有人可以帮我找到逻辑或语法的问题吗?
在此先感谢,请说明我应提供的任何细节PS我可以确认未提供的提供的代码是否正常运行并经过测试。
它正在发生,因为你使用的是i
而不是j
。 但i
不会在中途停止,但它会继续并重新交换arrays。
这是一个正确的代码:
for (int i = 0; i < imgArray.length; i++) { for (int j = 0; j < imgArray[i].length / 2; j++) { temp = imgArray[i][j]; imgArray[i][j] = imgArray[i][imgArray.length - 1 - j]; imgArray[i][imgArray.length - 1 -j] = temp; } }
或者,如果要交换列,而不是行:
for (int i = 0; i < imgArray.length / 2; i++) { for (int j = 0; j < imgArray[i].length; j++) { temp = imgArray[i][j]; imgArray[i][j] = imgArray[imgArray.length - 1 - i][j]; imgArray[imgArray.length - 1 -i][j] = temp; } }
这将正确地水平翻转图像:
public static void horizontalFlip(int[][] imgArray) { int temp; for (int i = 0; i < imgArray.length; i++) { for (int j = 0; j < imgArray[i].length/2; j++) { temp = imgArray[i][j]; imgArray[i][j] = imgArray[i][imgArray[i].length - 1 - j]; imgArray[i][imgArray[i].length - 1 - j] = temp; } } }