`
zhelong111
  • 浏览: 188632 次
  • 性别: 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打包的大图集切割成小图片

    描述中提到,“能读取json文件,切割小图片”,这意味着在进行图集切割时,TexturePacker会生成一个JSON文件,其中包含了每个小图像在大图集中的位置、大小以及可能的旋转和其他元数据。这个JSON文件是解包过程的...

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

    图集切割工具的自动识别功能意味着它可以智能地检测大图中的各个小图片边界,而无需手动设定每个图片的位置和大小。这对于处理包含大量小图像的复杂图集来说,极大地提高了工作效率。 总结一下,这款图集切割工具...

    栅格大图切成小图片程序

    在IT行业中,尤其是在Web开发和GIS(地理信息系统)领域,栅格大图切成小图片的程序是一种常见的技术手段。这种程序的主要目的是为了优化图像在网页或应用中的加载速度和显示效率,尤其对于大规模的地图数据来说更为...

    大图切割浏览

    大图切割浏览的基本原理是将大图分割成多个小块(通常为矩形),每个小块都是一个独立的较小尺寸的图片。当用户在网页上滚动或缩放时,只加载当前视窗内的图片块,而不是一次性加载整个大图。这样可以显著减少初次...

    C#实现图片切割的方法

    图片切割是将一幅大图片按用户要求切割成多幅小图片的过程。这个过程需要对图片进行处理,以获取用户所需的图片尺寸和格式。C#提供了强大的图像处理能力,通过使用Graphics类和Bitmap类,我们可以轻松地实现图片切割...

    asp图片切割.rar

    ASP图片切割技术是一种在Web开发中处理大图或高分辨率图片的方法,主要目的是为了提高网页加载速度和优化用户体验。在给定的“asp图片切割.rar”压缩包中,可能包含了一个使用Active Server Pages (ASP) 实现的图片...

    把一个大图片自动切割成N1XN2个小图,并自动编号

    3. **图像处理**:根据用户设定的N1和N2,计算出总切割块的数量,并将大图片分割成相应数量的小图片。这通常涉及到坐标计算,以及将原始图像数据按指定尺寸切割。 4. **编号与保存**:每一块小图片被赋予一个唯一的...

    图片切割asp+组件aspjpeg

    图片切割是指将一个大图片按照指定的尺寸或区域进行分割成多个小图片的过程。这项技术在网站设计中特别有用,例如在制作轮播图、瀑布流布局或者需要自适应不同设备尺寸的网页时。通过切割图片,我们可以根据网页布局...

    图片切割工具Matlab实现

    图片切割是指从一张大图中选取特定区域并将其独立出来,形成新的小图片。这项技术广泛应用于图像分析、网页设计、图像识别等多种场景。Matlab,全称Matrix Laboratory,是一款强大的数值计算和数据可视化软件,它...

    Smart Slicer 2D

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

    Unity3D 图片切割

    一张大图可能会占用大量内存,加载时间也会增加,而将其切割成小块,可以按需加载,减少内存占用并提高加载速度。在Unity3D中,这通常通过Sprite Packer和Sprite Renderer组件来实现。 1. **Sprite Packer**: 这是...

    图像切割软件SPLITZ

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

    WPF加载超大图片

    在Windows Presentation Foundation (WPF) 中,加载超大图片可能会遇到性能问题,因为WPF默认情况下会尝试一次性加载整个图像到内存中,这可能导致内存溢出或者显示为白色,尤其是在处理20M以上的高清大图时。...

    Qt4.8.2 绘图 切割图片

    这个功能允许开发者将一张大图片分割成多个小图片,这在很多场景下都是非常实用的,比如制作拼图游戏、处理网页图像或者优化UI元素。 首先,我们需要理解Qt的绘图系统。Qt 4.8.2中的QPainter类是进行图形绘制的核心...

    ATOM图像切割工具绿色版

    在这个背景下,"ATOM图像切割工具绿色版"应运而生,它是一款高效、易用的图像切割软件,能够帮助用户快速将大图分割成多个小图,满足多样化的需求。 ATOM图像切割工具的特色在于其“绿色”属性,这意味着它无需安装...

    大图剪切工具

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

    图片切割工具.rar

    在设计、网页制作、社交媒体配图等领域,图片切割工具非常实用,能够帮助用户精确地选取图像的某一部分,或者将大图片分解成多个小图片。 描述中的重复部分“图片切割工具”进一步强调了该软件的核心功能,即处理和...

    帧动画图片切割

    在这个过程中,"帧动画图片切割"是指将包含多帧动画的大图分割成若干个相同大小的小图片,每个小图片代表动画序列中的一帧。 首先,我们需要理解帧动画的基本原理。帧动画由一系列有序的静态图片组成,这些图片按照...

    Windows -九宫格图片切割器

    为了使发布的图片更具吸引力,一种流行的方式是将一张大图分割成九张小图,形成一个视觉效果独特的“九宫格”。针对这个需求,出现了专门的工具——"Windows - 九宫格图片切割器"。这款小巧实用的软件可以帮助用户...

    Android高级应用源码-andengine中直接加载多张小图片合成一张大图片生成动画精灵.zip

    当需要将多张小图片合并为一张大图时,我们可以创建一个`TextureAtlas`。`TextureAtlas`允许我们将多个`TextureRegion`打包到同一个`Texture`上,这样就可以一次性加载所有图片。 1. 创建`TextureAtlas`: 首先,...

Global site tag (gtag.js) - Google Analytics