【发布时间】: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