`
zhelong111
  • 浏览: 184169 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

将大图切割为小图片

 
阅读更多
package com.clip;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

/**
 * 切割图片并逐帧播放
 * 将一张6*2的大图片切割成12张小图片
 * @author zhouli
 *
 */
public class MyView extends SurfaceView implements Callback, Runnable {
	
	private Bitmap[] robotBmps = new Bitmap[12];
	private int frameX; // 小图在大图中的x坐标
	private int frameY; // 小图在大图中的y坐标
	private int frameW; // 小图的宽度
	private int frameH; // 小图的高度
	private SurfaceHolder sh;
	private Canvas canvas;
	private int currFrame; // 当前绘制帧
	private boolean flag;  // 线程循环标识
	
	public MyView(Context context) {
		super(context); 
		
		sh = this.getHolder();
		sh.addCallback(this);
		
		// 切割图片
		Bitmap robot = BitmapFactory.decodeResource(getResources(), R.drawable.robot);
		frameW = robot.getWidth() / 6;
		frameH = robot.getHeight() / 2;
		
		for (int i = 0; i < robotBmps.length; i++) {
			frameX = (i % 6) * frameW; 
			frameY = (i / 6) * frameH; 
			robotBmps[i] = Bitmap.createBitmap(robot, frameX, frameY, frameW, frameH);
		} 
	}

	private void logic() {
		currFrame++;
		if (currFrame >= 12) {
			currFrame = 0;
		}
	}
	/**
	 * 绘制图片
	 */
	private void drawFrame() {
		
		try {
			canvas = sh.lockCanvas();
			canvas.drawColor(Color.BLACK);
			
			if (canvas != null) {
				// 绘制机器人
				canvas.drawBitmap(robotBmps[currFrame], (this.getWidth() - frameW) / 2, (this.getHeight() - frameH) / 2, null);
			}
		} catch (Exception e) {
			e.printStackTrace(); 
		} finally {
			if (canvas != null) {
				sh.unlockCanvasAndPost(canvas);
			}
		}
	}
	
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		 flag = true;
		 currFrame = 0;
		 new Thread(this).start();
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		flag = false;
	}

	@Override
	public void run() {
		while (flag) {
			drawFrame();
			logic();
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			} 
		}
	} 
}

运行结果:


  • 大小: 5.3 KB
分享到:
评论

相关推荐

    texturepacker打包的大图集切割成小图片

    texturepacker打包的大图集切割成小图片.能读取json文件,切割小图片。选择软件选项中,最后的open json选项读取.

    图集切割工具(命令行切割图集,单张大图片,自动识别,切割成许多小图片)

    图集切割工具(命令行切割图集,单张大图片,自动识别,切割成许多小图片)

    Smart Slicer 2D

    Smart Slicer 2D Unity3D将2D图片切割的插件,可以快速实现画线切割图片效果

    图像切割软件SPLITZ

    有时我们基于某种原因(比如为方便浏览大图、制作拼图游戏,或是不想让访客下载站点的图片:(等等)而需要将图片化整为零成若干小图片,这款出自德国的SplitZ!或许可以帮您替代许多大型商业软件才能完成的工作。它能...

    大图剪切工具

    从网上下载的图片素材有时候是一张大图,里面是很多小图片,在使用时需剪切下来,本软件适用于排列整齐的小图剪切。 运行环境: .net framework2 使用方法: 先设置上下左右边距去除边上的空白部分,剩下的矩形按...

    帧动画图片切割

    在一张大图上切割相同大小的图片,适合所有帧动画图片在一张大图片上切每一张小图片大小相同。

    图片切割生成HTML代码合并(GIFfyCutter)v2.8英文免费安装版

    图片切割生成HTML代码合并(GIFfyCutter) 可用于网页制作中对较大图片的处理,软件功能强大,它可以将一张大图分割成多个小图片,并生成可以合并显示的HTML代码,如果单张图片体积较大,在网页打开时会比较慢,使用...

    py练手实例-九宫格填充切割.zip

    代码使用了Python的PIL库(Pillow),实现了对一张图片进行填充和切割的操作。下面是代码的功能概述:...这段代码的功能是将一张图片填充为正方形,然后将其切割成9张小图片。这对于制作朋友圈九宫格图片等场景非常有用

    白鹭egret图集分割工具

    白鹭egret图集分割工具。支持拆分两种图集资源:Egret MovieClip、Sprite Sheet。支持文件夹批量操作。支持分割后生成的文件夹创建到图片对应的目录,自己写的,亲测可用

    Python切割图片成九宫格的示例代码

    这篇文字讲述如何使用Python把一张完整的大图切割成9份小图片,制作朋友圈九宫格图文分享。 原图如下:   我们想要利用这张图制作高逼格的九宫格朋友圈分享。 达到类似于这样的效果:   实现原理非常简单,那就是...

    野生动物红外照片编辑器.zip

    将一张大图片切割成多张小图片,并标记每张图片的类型。保存为一个csv文件。软件实现了图片放大,缩小,跳转、翻页等基本功能。实用性高。

    凌霄图像批处理专家4.2.1.288破解版

    包括“批量格式转换”、“批量脚本处理”、“批量添加水印”、“批量文件改名”、“批量调整尺寸”、“批量制作缩略图”、“批量压缩JPG”、“创建电子相册”、“创建PDF文件”、“批量上传文件”,“批量合并图片”...

    4宫格图片切分小工具【适用midjourney切分图片】

    适合人群:midjourney绘画师、自媒体运营人员 适合场景:你是否曾经遇到过这样的情况:用midjourney生成的一张4宫格...四宫格图片切割工具可以帮助你快速、方便地将4宫格图片切割成4张相等大小的小图片,并保存或分享。

    淘淘图片批处理之星.exe

    包括批量格式转换、批量脚本处理、批量文件改名、批量调整尺寸、批量制作缩略图、批量压缩JPG、批量合并图片、批量添加背景、批量截取图片、批量切割图片、批量上传文件、创建PDF文件、创建多页TIF、创建电子相册等...

    GIFfyCutter v2.8

    可以把较大的图片切割成过个较小的图片,并自动生成 HTML 代码将它们并回原来较大的图片,每个小图片可以指定相应的 URL。用来制作成为热点链接

    c++实现合并文件以及拆分实例代码

    昨天看到一篇介绍TFS的文章,大意是为了处理海量图片,采用分布式架构,将小图片合并为大的文件 兴趣驱使下,写了一个简单的文件合并拆分程序 合并的方法很简单,将小文件写入到大文件中,使用二进制的方式。在大...

Global site tag (gtag.js) - Google Analytics