【问题标题】:Rotate array while maintaining orientation of components in java在Java中保持组件方向的同时旋转数组
【发布时间】:2020-06-01 18:28:44
【问题描述】:

对于我正在进行的项目,我必须阅读字体精灵表(如下所示的 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("]]", "]"));

这给了我一个 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("]]", "]"));

此代码可以完美地旋转数组,除了字体中的每个字母也旋转 90 度。如下图所示,“!”很明显也是旋转的。

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

【问题讨论】:

  • 分享 font.png :) 也许 for(int j = 7; j >= 0; j--) 而不是 for(int j = 0; j
  • @JamesMead 不幸的是它输出了相同的结果
  • 您不想旋转 760 x 8(宽度优先)阵列。您想要分割 760 x 8 阵列。假设每个字符的宽度为 5 个像素。您想创建一个 5 x 1216 阵列。您取原始数组的每个 5 x 8 段,并将它们一个一个堆叠起来。如果字符宽度不是 5,则替换为实际字符宽度。对于比例字体,您必须获取最大字符的最大宽度并用零填充其他字符。

标签: java arrays matrix bufferedimage


【解决方案1】:

替换

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

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

【讨论】:

    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2014-12-23
    相关资源
    最近更新 更多