Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
旋转数组,同时保持java中组件的方向_Java_Arrays_Matrix_Bufferedimage - Fatal编程技术网

旋转数组,同时保持java中组件的方向

旋转数组,同时保持java中组件的方向,java,arrays,matrix,bufferedimage,Java,Arrays,Matrix,Bufferedimage,对于我正在进行的项目,我必须阅读字体精灵表(font.png,如下所示),并将每个字符转换为索引数组 读取文件并将其转换为数组时,我使用流动代码: BufferedImage img = ImageIO.read(new File("D:\\Downloads\\font.png")); int[][] font = new int[8][760]; for(int i = 0; i < img.getWidth(); i++) { for(int

对于我正在进行的项目,我必须阅读字体精灵表(font.png,如下所示),并将每个字符转换为索引数组

读取文件并将其转换为数组时,我使用流动代码:

    BufferedImage img = ImageIO.read(new File("D:\\Downloads\\font.png"));
    int[][] font = new int[8][760];
    for(int i = 0; i < img.getWidth(); i++) {
        for(int j = 0; j < img.getHeight(); j++) {
            font[j][i] = (img.getRGB(i, j) != - 1) ? 1:0;
        }
    }
    System.out.println(Arrays.deepToString(font).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
buffereImage img=ImageIO.read(新文件(“D:\\Downloads\\font.png”);
int[]font=新int[8][760];
对于(int i=0;i
这给了我一个8x760 int[],其中每个黑色像素是1,每个白色像素是0(图像中的字符是空格,!,“,#)

在尝试将阵列旋转为760x8阵列时,我尝试了以下代码:

    int[][] rFont = new int[760][8];
    for(int a = 0; a < 95; a++) {
        for(int i = 0; i < 8; i++) {
            for(int j = 0; j < 8; j++) {
                rFont[i + 8*a][j] = font[j][i + 8*a];
            }
        }
    }
    System.out.println(Arrays.deepToString(rFont).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
int[]rFont=new int[760][8];
对于(int a=0;a<95;a++){
对于(int i=0;i<8;i++){
对于(int j=0;j<8;j++){
rFont[i+8*a][j]=font[j][i+8*a];
}
}
}
System.out.println(Arrays.deepToString(rFont).replace(“],”,“]\n”).replace(“[[”,“[”).replace(“]],“]);
除了字体中的每个字母也旋转90度外,此代码可以完美地旋转数组。如下图所示,“!”也被旋转。

我的代码哪里出错了,没有保持字符的方向?

替换

        for(int j = 0; j < 8; j++) {
            rFont[i + 8*a][j] = font[j][i + 8*a];
        }

Share font.png:)可能用于(int j=7;j>=0;j--)而不是(int j=0;j<8;j++)?@JamesMead不幸的是,它输出相同的结果您不想旋转760 x 8(宽度优先)数组。您要分割760 x 8数组。假设每个字符的宽度为5像素。您要创建一个5 x 1216数组。取原始数组的每个5 x 8段,并将它们一个叠在另一个上。如果字符宽度不是5,请替换实际字符宽度。对于比例字体,您必须最大字符的最大宽度,并用零填充其他字符。
                for (int j = 7; j >= 0; j--) {
                    rFont[i + 8 * a][7 - j] = font[j][i + 8 * a];
                }