本处提供两个实例,用矩阵变量画图。
实例一:
用矩阵上的变量,表示小图片的位置编号,然后把图片画上去,步骤如下:
1,把提供的原图片编号,用一维图片数组编号,如
一个4*7的小图片组合,用pic_Yuantu [i]来给这28个小图片编号,编号方法:
//这是一种不用setClip方法的编号
Image pic_Yuantu[] = new Image[28];
try {
Image img = Image.createImage("/res/t_pic.png"); //加载连连图片看
for (int i = 1; i <= 28; i++) { //图片数量
pic_Yuantu[i - 1] = Image.createImage(HSize, VSize); //图片大小
Graphics newg = pic_Yuantu[i - 1].getGraphics();
newg.drawImage(img, ((1-i)%7 )* HSize, ((1-i)/7 )* VSize, 0); //画图片
}
} catch (Exception ee) {
ee.printStackTrace();
}
2,画一个矩阵,并且给矩阵的每一个位置编号, 二维的数组有个好处,就是自己有个序列号 matrix [][] 对应位置, 可以用这个序列号来记录每个位置的值,如:
画一个3*5的二维数组矩阵, 并给每个数组位置编号:
A>. 画一个数组: private int matrix [3][5];
B>. 给数组编号: b, b是个一维数组,
int j = 0;
int b = 0;
for (int x=0; x<3; x++){
for (int y=0; y<5; y++)
{
j = 1-j;
if (j == 1)
{
b = ((x * HCount + y) / 2); //按照双号编号,即0,0,1,1
//b = ((x * HCount + y) / 2) % 28; //刚才有28个小图片
}
matrix[x][y] = b; //按照单元格图片索引生成的有规律的矩阵
}
}
C>. 即二维数组矩阵的编号matrix[x][y]位置上对应一个具体的值,这个值用个一维数组b存储.
3,把小图片画到二维数组矩阵对应的位置上,这是连接二者的关键,即:把原图片数组pic_Yuantu [i]上的编号与二维数组矩阵位置上的值 b 对应起来,就可以用drawImageb把pic_Yuantu[i]画到位置 matrix[x][y]=b 上,方法如下:
for (int x = 0; x < 3; x++) //遍历横向
{
for (int y = 0; y < 5; y++){ //遍历纵向
int b = matrix.getAt(x + 1, y + 1); //获取矩阵内容,调用一个方法,返回的结果是:
// return matrix[x ][y ];
//也就是: b = matrix[x][y];
if (b >= 0 && b < seedCount) //绘制图片,并绘制外边框
{
g.setColor(outerColor); //设置外边框颜色
g.drawImage( pic_Yuantu [b], ( x*HSize + xMargin + 1),
( y*VSize + yMargin + 1), 0); //绘制图片
g.drawRect(x * HSize + xMargin,
y * VSize + yMargin, HSize, VSize); //绘制边框
}
}
}
当然具体操作起来,还要变换矩阵,打乱排列位置,具体参照排列矩阵.。
实例二:
1. 画布上3*3的数组, 数组序列号与数组行列位置的关系是
image [i][j] = i*3+j;
2. 4*7的图片, 如果是一维索引号的话,即: "image i; " 从0到27编号,而不是上面image[i][j] 编号, 那么索引号i 与行列的关系是:
行号 H = (i-1)%7, 是取余, 那么具体到图片i的x坐标是: [((i-1)%7 ) * 每个图片的宽];
列号 L = (i-1)/7, 是取除, 那么具体到图片i的y坐标是: [((i-1)/7 ) * 每个图片的高];
3. 生成有序矩阵: b = ((x * HCount + y) / 2) % SeedCount;
for (int x = 0; x < HCount; x++){
for (int y = 0; y < Vcount; y++)
{
j = 1-j; //防止生成单个图片的。
if (j == 1)
{
b = ((x * HCount + y) / 2) % SeedCount;
}
matrix[x][y] = b; //按照单元格图片索引生成的有规律的矩阵
}
}
HCount:列数,即新建放图片的数组总列数
SeedCount:原图片总共含有的图片数。
循环之后,即:给新建HCount列,Vcount行的数组编上号,
A,由于图片必须成对出现,所以要除以2;
B,由于怕源小图片乘以2<新建数组的总方格,所以对SeedCount取余;以便把多出的方格用重复的图片显示
C,排列后的位置为:
------------
0 1 3 4
0 2 3 5
1 2 4 5
------------
D,编号即为:matrix[x][y] = b;
<骑猪闯天下>