本处提供两个实例,用矩阵变量画图。
实例一:
用矩阵上的变量,表示小图片的位置编号,然后把图片画上去,步骤如下:
1,把提供的原图片编号,用一维图片数组编号,如
     一个4*7的小图片组合,用pic_Yuantu [i]来给这28个小图片编号,编号方法:
 //这是一种不用setClip方法的编号
         //这是一种不用setClip方法的编号
 Image pic_Yuantu[] = new Image[28];
    Image pic_Yuantu[] = new Image[28];

 try
        try  {
{
 Image img = Image.createImage("/res/t_pic.png");            //加载连连图片看
            Image img = Image.createImage("/res/t_pic.png");            //加载连连图片看
 
                

 for (int i = 1; i <= 28; i++)
                for (int i = 1; i <= 28; i++)  {                        //图片数量
{                        //图片数量

 pic_Yuantu[i - 1] = Image.createImage(HSize, VSize);        //图片大小
                pic_Yuantu[i - 1] = Image.createImage(HSize, VSize);        //图片大小
 Graphics newg = pic_Yuantu[i - 1].getGraphics();
                Graphics newg = pic_Yuantu[i - 1].getGraphics();

 newg.drawImage(img, ((1-i)%7 )* HSize, ((1-i)/7 )* VSize, 0);    //画图片
                newg.drawImage(img, ((1-i)%7 )* HSize, ((1-i)/7 )* VSize, 0);    //画图片            
 }
            }

 } catch (Exception ee)
        } catch (Exception ee)  {
{
 ee.printStackTrace();
            ee.printStackTrace();
 }
        }
     画一个3*5的二维数组矩阵, 并给每个数组位置编号:
 A>. 画一个数组:  private int matrix [3][5];
    A>. 画一个数组:  private int matrix [3][5];
 B>. 给数组编号:  b, b是个一维数组,
    B>. 给数组编号:  b, b是个一维数组,
 
  
 int j = 0;
        int j = 0;
 int b = 0;
        int b = 0;

 for (int x=0; x<3; x++)
        for (int x=0; x<3; x++) {
{
 for (int y=0; y<5; y++)
            for (int y=0; y<5; y++)

 
             {
{
 j = 1-j;
                j = 1-j;
 if (j == 1)
                if (j == 1)

 
                 {
{
 b = ((x * HCount + y) / 2);          //按照双号编号,即0,0,1,1
                    b = ((x * HCount + y) / 2);          //按照双号编号,即0,0,1,1
 //b = ((x * HCount + y) / 2) % 28;      //刚才有28个小图片
            //b = ((x * HCount + y) / 2) % 28;      //刚才有28个小图片
 }
                }
 matrix[x][y] = b;              //按照单元格图片索引生成的有规律的矩阵
                matrix[x][y] = b;              //按照单元格图片索引生成的有规律的矩阵  
 }
            }
 }
        }

 C>. 即二维数组矩阵的编号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 x = 0; x < 3; x++)                    //遍历横向

 
         {
{

 for (int y = 0; y < 5; y++)
            for (int y = 0; y < 5; y++) {            //遍历纵向
{            //遍历纵向
 int b = matrix.getAt(x + 1, y + 1);    //获取矩阵内容,调用一个方法,返回的结果是:
                int b = matrix.getAt(x + 1, y + 1);    //获取矩阵内容,调用一个方法,返回的结果是: 
 //      return matrix[x ][y ];
                                                    //      return matrix[x ][y ];
 //也就是: b = matrix[x][y];
                                                    //也就是: b = matrix[x][y];
 
                    
 if (b >= 0 && b < seedCount)        //绘制图片,并绘制外边框
                if (b >= 0 && b < seedCount)        //绘制图片,并绘制外边框

 
                 {
{        
 g.setColor(outerColor);            //设置外边框颜色
                    g.setColor(outerColor);            //设置外边框颜色
 g.drawImage( pic_Yuantu [b],  ( x*HSize + xMargin + 1),
                    g.drawImage( pic_Yuantu [b],  ( x*HSize + xMargin + 1), 
 ( y*VSize + yMargin + 1), 0);                //绘制图片
                            ( y*VSize + yMargin + 1), 0);                //绘制图片
 g.drawRect(x * HSize + xMargin,
                    g.drawRect(x * HSize + xMargin, 
 y * VSize + yMargin, HSize, VSize);            //绘制边框
                            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 x = 0; x < HCount; x++) {
{
 for (int y = 0; y < Vcount; y++)
            for (int y = 0; y < Vcount; y++)

 
             {
{
 j = 1-j;            //防止生成单个图片的。
                j = 1-j;            //防止生成单个图片的。
 if (j == 1)
                if (j == 1)

 
                 {
{
 b = ((x * HCount + y) / 2) % SeedCount;
                    b = ((x * HCount + y) / 2) % SeedCount;
 }
                }
 matrix[x][y] = b;    //按照单元格图片索引生成的有规律的矩阵
                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;
 
<骑猪闯天下>