对不起,这是一些代码,但这里没有太多要删除。这应该是读取图像(字母表的精灵表)并将其切割成每个单独字母的较小子图像。按下某个键时,屏幕上会显示相应的字母,但此部分仅用于创建实际的子图像。
http://i.imgur.com/4I4uX.png(图片)
package typeandscreen;
(where the imports should be, i just cut them out to save space)
public class Font{
final int width = 78; //gives the dimensions of the image
final int height = 32;
final int rows = 4;
final int cols = 13;
BufferedImage letters[] = new BufferedImage[rows*cols]; //makes the array of
//subimages. rows*cols is
//the number of subimages
void test(){
try{
final BufferedImage totalImage = ImageIO.read(new File("ABCabcs.png"));
//loads the big image itself
以下部分让我感到困惑。什么是i和j for,为什么要添加和乘以它们?这部分是为了找出子图像有多大,对吧?它不应该只是4乘13,这是行* cols?
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
letters[(i * cols) + j] = totalImage.getSubimage(
j * width,
j * height,
width,
height
);
}
}
} catch(IOException e){
e.printStackTrace();
}
}
}
我不知道i和j在做什么。我在这里缺少什么?
答案 0 :(得分:3)
应该是
j * width,
i * height,
宽度和高度似乎对于单个字母的大小来说太大了,但它们也是这样使用的。
我经历了几行字母,j遍历列。要获得位置(j,i)处的字母坐标,您需要多个j(列的索引)宽度(每个字母的宽度)和i(行的索引)高度(字母)。
字母是与字母对应的图像数组。
letters[(i * cols) + j]
是将矩形矩阵放入1-D数组的标准习惯用法。见图:
0 1 2
0 A B C
1 D E F
以
的形式存储在数组中0 1 2 3 4 5
A B C D E F
所以这个数组中F的索引是1 * 3 + 2 = 5,其中i = 1,j = 2,cols = 3(因为有3列)