把一张合成图分拆出各个小图

反编译一个程序,看到一张合成图,想分拆出里面的每个小图,知道了各个图的坐标大小后,写了一个小方法,希望对大家有用哈

package com.bitimage;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;

public class BigImageToSmall extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		int[] ix = { 0, 0, 32, 64, 96, 128, 168, 208, 248, 0, 33, 66, 99, 132,
				150, 168, 132, 150, 168, 186, 204, 222, 186, 204, 222, 0, 0, 0,
				240, 240, 260, 260, 0, 31, 95, 159, 223, 700, 670, 670, 287, 0,
				260, 0, 12, 24, 36, 48, 60, 72, 84, 96, 108, 0, 670, 670, 0, 0,
				626, 648, 0, 298, 0, 288, 320, 0, 0, 670, 702, 734, 670, 702,
				734, 670, 702, 734, 670, 120, 130, 140, 150, 160, 170, 180,
				190, 200, 210, 702, 0, 0, 0, 0, 0, 320, 0 };
		int[] iy = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 42, 42, 40, 40, 40, 58,
				58, 58, 40, 40, 40, 58, 58, 58, 76, 127, 144, 40, 57, 231, 248,
				280, 280, 280, 280, 280, 295, 234, 295, 280, 321, 153, 153,
				153, 153, 153, 153, 153, 153, 153, 153, 153, 355, 0, 139, 504,
				225, 0, 0, 170, 40, 425, 0, 263, 0, 0, 333, 333, 333, 380, 380,
				380, 427, 427, 427, 474, 153, 153, 153, 153, 153, 153, 153,
				153, 153, 153, 474, 0, 0, 0, 0, 0, 0, 459 };
		int[] iw = { 0, 32, 32, 32, 32, 40, 40, 40, 40, 33, 33, 33, 33, 18, 18,
				18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 290, 320, 294, 58, 48,
				58, 58, 31, 64, 64, 64, 64, 44, 80, 30, 31, 320, 50, 12, 12,
				12, 12, 12, 12, 12, 12, 12, 12, 310, 113, 110, 308, 260, 22,
				22, 260, 17, 320, 28, 202, 1, 1, 32, 32, 32, 32, 32, 32, 32,
				32, 32, 32, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 76, 1, 1,
				1, 1, 1, 306, 320 };
		int[] ih = { 0, 42, 42, 42, 42, 35, 35, 35, 35, 34, 34, 34, 34, 18, 18,
				18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 51, 17, 9, 17, 9, 17,
				17, 41, 41, 41, 41, 41, 24, 61, 32, 41, 34, 78, 17, 17, 17, 17,
				17, 17, 17, 17, 17, 17, 70, 139, 95, 40, 55, 520, 520, 55, 20,
				34, 36, 57, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 17,
				17, 17, 17, 17, 17, 17, 17, 17, 17, 48, 1, 1, 1, 1, 1, 263, 45 };

		System.out.println("ix length = " + ix.length);
		System.out.println("iy length = " + iy.length);
		System.out.println("iw length = " + iw.length);
		System.out.println("ih length = " + ih.length);
		FileOutputStream fos = null;
		for (int i = 1; i < 95; i++) {
			System.out.println(i);
			String aa = String.format("a%02d", i);
			File file = new File(Environment.getExternalStorageDirectory(), aa + ".png");
//			File file = new File(System.getProperty("user.dir"),"a"
//					+ i + ".png");
			System.out.println(file);

			if (!file.exists()) {
				try {
					file.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			Drawable d = getResources().getDrawable(R.drawable.cs_jmp);
			BitmapDrawable bd = (BitmapDrawable) d;
			Bitmap bm = bd.getBitmap();
			Bitmap bitmap = Bitmap.createBitmap(bm, ix[i], iy[i], iw[i], ih[i]);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			bitmap.compress(CompressFormat.PNG, 100, baos);
			InputStream in = new ByteArrayInputStream(baos.toByteArray());

			try {
				fos = new FileOutputStream(file);
				byte[] bytes = new byte[100];
				int tempbyte;
				while ((tempbyte = in.read(bytes)) != -1) {
					System.out.println("tempbyte = " + tempbyte);
					fos.write(bytes,0,tempbyte);
				}
				fos.flush();
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (fos != null) {
					try {
						fos.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (in != null) {
					try {
						in.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}

  记得加权限哦

<uses-permission
		android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  demo图片

时间: 2024-11-10 15:09:27

把一张合成图分拆出各个小图的相关文章

凿空西域:汉武帝海选 张骞胜出

汉武帝建元二年(前139),一个普通的郎官肩负着一项特殊使命,开始了探索西域的征程.正是他的西行,开辟了一条千古传颂的丝绸之路.司马迁在<史记>称他"凿空西域".什么是"凿空"?当世界还是一个混沌的鸡蛋,盘古以肉为土,以血为水,开天辟地称得上"凿空":上帝奋战七天,垒山引水,开光造人,也是"凿空"!他是谁?汉武帝为什么要派他出使西域?他为什么在身后赢得如此巨大的声誉? 这个感动国人乃至全天下的伟丈夫,名叫张骞. 张

NCL 小图对其问题

从昨天下午开始的折腾终于告一段落,虽然解决得不甚完善,只是图可以用了…… 问题起自想把之前手动拼成的一页四张的图用脚本自动生成,这样一方面应该对得更齐一点,另一方面大大节省人工. 这本来应该是件很容易的事情,NCL里面有一个gsn_panel命令就是用来完成这个的,之前也使用过.于是费了不少工夫把原来画四张小图的程序粘在一起,最后只要生成一张包含这四个小图的大图就行了.问题出现了,四个小图竟然对不齐!第三个小图明显比人家短,第一行的两张图也不一样宽……不可leng! 一开始问题更严重一些,图超出

关于使用TexturePackerGUI将图片合成和用Python Imaging Library将图片分解

写这片博客前,我在学习cocos2d-x,正在做一个微信打飞机的项目,为了将飞机图片资源合成为一张,使用到了TexturePackerGUI软件,在这介绍使用方法,后面是将这张合成图片分解成原来图片的方法. 合成 软件下载地址 破解完成之后就开始使用,对里面控件不熟悉的请参考这篇文章,虽然看起来复杂,但是只要把你所有需要合成的资源全部移到右边的框内就行了,如下图(蓝色的地方): 好了,把图片全部拖进去之后,就可以开始导出了,选择菜单栏中的Publish,在此之前,请在左边的DataFile中设置

mysql多张表合并一张表进行查找

今天有个需求是 mysql多张表合并一张表查询出该表有多少个userid(去重). 首先我的思路是,把多张表采用union合并成一张表,然后进行group by, 最后进行sum(userid), 得出数量. select COUNT(DISTINCT(`user_id`)) FROM ( select user_id from log_20160706 union select user_id from log_20160707 union SELECT user_id from log_20

Nodejs学习笔记(三)——一张图看懂Nodejs建站

前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试Nodejs>之后,代码编写环境就从Sublime转战到Eclipse下,感觉顺手多了.于是就跟着Scott老师学起了Nodejs建站的课程(推荐大家点进去看看),踏上了未爬先走的路子. 作为一个白里透白的小白来说,今天主要记录下如何用Nodejs搭建一个小小的网站,以及自己对于这种Nodejs建站的运

快速找出故障机器

题目描述 关心数据挖掘和搜索引擎的程序员都知道,我们需要很多的计算机来存储和处理海量数据. 然而,计算机难免出现硬件故障而导致网络联系失败或死机.为了保证搜索引擎的服务质量,我们需要保证每份数据都有多个备份. 简单起见,假设每个机器存储一个标号为ID的记录(ID是小于十亿的整数),假设每份数据都保存两个备份,这样就有两个机器储存了同样的数据. 1.在某个时间,如果得到一个数据文件ID的列表,是否能够快速地找出这个表中仅出现一次的ID? 2.如果已经知道只有一台机器死机(也就是说只有一个备份丢失)

张小龙或许想说,一切和聊天无关的“内容”都会成为“小程序”

今日,微信一年一度的官方活动微信公开课Pro正式开讲.腾讯高级副总裁."微信之父"张小龙在现场做了开场分享.张小龙说,自己这段时间"跳一跳"最好的成绩玩到了6000多分. 但这个并不重要,重要的是,张小龙透露出了一个核心信息--微信变无聊了. 张小龙在现场提到,目前小程序的日活已经达到了1.7亿.在微信刚上线的时候,被用户最爱使用的功能之一就是「附近的人」. 从整个演讲和上述这句话来说,我们能够看到以下4个有趣的信息点: 1.当年大家用微信,是社交. 之所以找附近的

一组成对的数字,找出不成对的数字

题面描述 有一个卡组,卡组中所有不同的卡牌都有两张.不小心遗失了一张,找出遗失的是哪张卡牌. 输入数据 输入数据的第一行为一个整数 T(1 <= T <= 10) ,表示有 T 组测试数据.每组数据的第一行为一个整数 n(2 <= n <=100000) , n 为偶数,表示一个卡组中卡牌的数量.接下来的一行有 n - 1 个整数,为剩余牌的编号,其中相同牌的编号相同,不同牌的编号不同. 输出数据 对于每组数据,在单独的一行中输出结果,为滑落牌的编号,格式见样例. 样例输入 221

图像人脸检测(框出人脸、笑脸、眼睛)

1 # 通过图片识别人脸 2 3 #1.概述: 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别.面部识别. 4 5 # 2.人脸识别步骤 6 # 1 人脸图像采集及检测 7 # 2 人脸图像预处理 8 # 3 人脸图像特征提取以及匹配与识别 9 10 # 3. 人脸识别的方法 11 # 在OpenCV中主要使用了两种特征(即两种方法)进行人脸检