将大图切割为小图片

Java代码  收藏代码
  1. package com.clip;  
  2.    
  3. import android.content.Context;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.BitmapFactory;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.view.SurfaceHolder;  
  9. import android.view.SurfaceHolder.Callback;  
  10. import android.view.SurfaceView;  
  11.   
  12.   
  13. public class MyView extends SurfaceView implements Callback, Runnable {  
  14.       
  15.     private Bitmap[] robotBmps = new Bitmap[12];  
  16.     private int frameX; // 小图在大图中的x坐标  
  17.     private int frameY; // 小图在大图中的y坐标  
  18.     private int frameW; // 小图的宽度  
  19.     private int frameH; // 小图的高度  
  20.     private SurfaceHolder sh;  
  21.     private Canvas canvas;  
  22.     private int currFrame; // 当前绘制帧  
  23.     private boolean flag;  // 线程循环标识  
  24.       
  25.     public MyView(Context context) {  
  26.         super(context);   
  27.           
  28.         sh = this.getHolder();  
  29.         sh.addCallback(this);  
  30.           
  31.         // 切割图片  
  32.         Bitmap robot = BitmapFactory.decodeResource(getResources(), R.drawable.robot);  
  33.         frameW = robot.getWidth() / 6;  
  34.         frameH = robot.getHeight() / 2;  
  35.           
  36.         for (int i = 0; i < robotBmps.length; i++) {  
  37.             frameX = (i % 6) * frameW;   
  38.             frameY = (i / 6) * frameH;   
  39.             robotBmps[i] = Bitmap.createBitmap(robot, frameX, frameY, frameW, frameH);  
  40.         }   
  41.     }  
  42.   
  43.     private void logic() {  
  44.         currFrame++;  
  45.         if (currFrame >= 12) {  
  46.             currFrame = 0;  
  47.         }  
  48.     }  
  49.       
  50.     private void drawFrame() {  
  51.           
  52.         try {  
  53.             canvas = sh.lockCanvas();  
  54.             canvas.drawColor(Color.BLACK);  
  55.               
  56.             if (canvas != null) {  
  57.                 // 绘制机器人  
  58.                 canvas.drawBitmap(robotBmps[currFrame], (this.getWidth() - frameW) / 2, (this.getHeight() - frameH) / 2null);  
  59.             }  
  60.         } catch (Exception e) {  
  61.             e.printStackTrace();   
  62.         } finally {  
  63.             if (canvas != null) {  
  64.                 sh.unlockCanvasAndPost(canvas);  
  65.             }  
  66.         }  
  67.     }  
  68.       
  69.     @Override  
  70.     public void surfaceCreated(SurfaceHolder holder) {  
  71.          flag = true;  
  72.          currFrame = 0;  
  73.          new Thread(this).start();  
  74.     }  
  75.   
  76.     @Override  
  77.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  78.             int height) {  
  79.         // TODO Auto-generated method stub  
  80.           
  81.     }  
  82.   
  83.     @Override  
  84.     public void surfaceDestroyed(SurfaceHolder holder) {  
  85.         flag = false;  
  86.     }  
  87.   
  88.     @Override  
  89.     public void run() {  
  90.         while (flag) {  
  91.             drawFrame();  
  92.             logic();  
  93.             try {  
  94.                 Thread.sleep(100);  
  95.             } catch (InterruptedException e) {  
  96.                 e.printStackTrace();  
  97.             }   
  98.         }  
  99.     }   
  100. }  

运行结果: 

将大图切割为小图片  

你可能感兴趣的:(将大图切割为小图片)