骑猪闯天下

J2ME随笔,记录成长的脚步

统计

留言簿(3)

阅读排行榜

评论排行榜

[J2ME-原创] 用矩阵上的变量,表示图片的位置,画图

本处提供两个实例,用矩阵变量画图。


实例一:
用矩阵上的变量,表示小图片的位置编号,
然后把图片画上去,步骤如下:

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;

 

<骑猪闯天下>

posted on 2008-08-29 22:03 骑猪闯天下 阅读(1308) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: