【Android开发学习46】Android平台分割PNG图片成小png图片

功能描述:

分解 assets 目录文件下的 PNG 图片成 各个小尺寸 PNG 图片 。

主函数执行:


       // 创建目录, 用来保存分解出来的图片

        createPath("/sdcard/gui_blocks/");

        createPath("/sdcard/gui_blocks_2/");

        createPath("/sdcard/gui_blocks_3/");

        createPath("/sdcard/gui_blocks_4/");

        createPath("/sdcard/items/");

        createPath("/sdcard/items_3x/");

        

        // 分解 gui_blocks.png

        Bitmap resource = getImageFromAssetsFile("gui_blocks.png");

        System.out.println("DTPrint first System.out.println"+resource); 

        Log.d("TAG", "DTPrint first tag"+resource);

        

        int i = 0;

        int j = 0;

        String pic_Name=null; 

        for( i=0; i<10; i++)

        {

        	for( j=0; j<10; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource, i*48, j*48, 48, 48);

        		pic_Name=String.format("gui_blocks/%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        

        

        // 分解 gui_blocks_2.png

        Bitmap resource_gui_blocks_2 = getImageFromAssetsFile("gui_blocks_2.png");

        i = 0;

        j = 0;

        for( i=0; i<10; i++)

        {

        	for( j=0; j<7; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_gui_blocks_2, i*48, j*48, 48, 48);

        		pic_Name=String.format("gui_blocks_2/big_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        for( i=0; i<32; i++)

        {

        	for( j=0; j<3; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_gui_blocks_2, i*16, 384+j*16, 16, 16);

        		pic_Name=String.format("gui_blocks_2/small_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        

        // 分解 gui_blocks_3.png

        Bitmap resource_gui_blocks_3 = getImageFromAssetsFile("gui_blocks_3.png");

        i = 0;

        j = 0;

        for( i=0; i<10; i++)

        {

        	for( j=0; j<7; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_gui_blocks_3, i*48, j*48, 48, 48);

        		pic_Name=String.format("gui_blocks_3/big_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        for( i=0; i<32; i++)

        {

        	for( j=0; j<3; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_gui_blocks_3, i*16, 384+j*16, 16, 16);

        		pic_Name=String.format("gui_blocks_3/small_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        

     // 分解 gui_blocks_4.png

        Bitmap resource_gui_blocks_4 = getImageFromAssetsFile("gui_blocks_4.png");

        i = 0;

        j = 0;

        for( i=0; i<10; i++)

        {

        	for( j=0; j<9; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_gui_blocks_4, i*48, j*48, 48, 48);

        		pic_Name=String.format("gui_blocks_4/big_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        for( i=0; i<32; i++)

        {

        	for( j=0; j<4; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_gui_blocks_4, i*16, 432+j*16, 16, 16);

        		pic_Name=String.format("gui_blocks_4/small_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        

        

        // items.png

        Bitmap resource_items = getImageFromAssetsFile("items.png");

        i = 0;

        j = 0;

        for( i=0; i<16; i++)

        {

        	for( j=0; j<12; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_items, i*16, j*16, 16, 16);

        		pic_Name=String.format("items/big_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        for( i=0; i<16; i++)

        {

        	//for( j=0; j<4; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_items, i*16, 240, 16, 14);

        		pic_Name=String.format("items/small_%d.0.png", i);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        

     // items_3x.png

        Bitmap resource_items_3x = getImageFromAssetsFile("items_3x.png");

        i = 0;

        j = 0;

        for( i=0; i<16; i++)

        {

        	for( j=0; j<12; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_items_3x, i*16, j*16, 16, 16);

        		pic_Name=String.format("items_3x/big_%d.%d.png", i, j);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

        for( i=0; i<16; i++)

        {

        	//for( j=0; j<4; j++)

        	{

        		Bitmap zero = Bitmap.createBitmap(resource_items, i*16, 240, 16, 14);

        		pic_Name=String.format("items_3x/small_%d.0.png", i);

        		saveBitmap(zero, pic_Name);

        		// 先判断是否已经回收

        		if(zero != null && !zero.isRecycled()){

        		// 回收并且置为null

        			zero.recycle();

        			zero = null;

        		}

        	}

        }

支持函数:


/** 

     * 从Assets中读取图片 

     */  

    private Bitmap getImageFromAssetsFile(String fileName)  

    {  

        Bitmap image = null;  

        AssetManager am = getResources().getAssets();  

        try  

        {  

            InputStream is = am.open(fileName);  

            image = BitmapFactory.decodeStream(is);  

            is.close();  

        }  

        catch (IOException e)  

        {  

            e.printStackTrace();  

        }  

    

        return image;  

    }  

    

    /** 保存方法 */ 

    public void saveBitmap(Bitmap bm, String picName) { 

    	Log.e("TAG", "保存图片"); 

    	File f = new File("/sdcard/", picName); 

    	if (f.exists()) { 

    		f.delete(); 

    	} 

    	try { 

    		FileOutputStream out = new FileOutputStream(f); 

    		bm.compress(Bitmap.CompressFormat.PNG, 90, out); 

    		out.flush(); 

    		out.close(); 

    		Log.i("TAG", "已经保存"); 

    	} catch (FileNotFoundException e) { 

    		// TODO Auto-generated catch block 

    		e.printStackTrace(); 

    	} catch (IOException e) { 

    		// TODO Auto-generated catch block 

    		e.printStackTrace(); 

    	} 

    } 

    

    /**

     * 创建目录文件

     */

    public static void createPath(String path) {

        File file = new File(path);

        if (!file.exists()) {

            file.mkdir();

        }

    }

在 AndroidManifest.xml 文件中添加权限支持:


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

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

转化后的图片效果:

本文博客源地址:http://blog.csdn.net/ypist

时间: 2024-10-09 20:31:15

【Android开发学习46】Android平台分割PNG图片成小png图片的相关文章

吴裕雄--天生自然Android开发学习:android开发知识学习思维导图

原文地址:https://www.cnblogs.com/tszr/p/12017363.html

android开发学习之路——连连看之游戏逻辑(五)

GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖,程序需要GameService组件包含如下方法.   ·start():初始化游戏状态,开始游戏的方法.     ·Piece[][] getPieces():返回表示游戏状态的Piece[][]数组.     ·boolean hasPieces():判断Pieces[][]数组中是否还剩Piec

Android开发学习一:环境搭建

一名刚刚学习Android的新人,本文章记录下学习过程. Android环境搭建主要: JDK安装 Eclipse安装 Android SDK安装 ADT安装 1.安装所下载的软件如下: jdk-7u7-windows-i586.rar eclipse-SDK-4.2-win32.zip installer_r20.0.3-windows.rar ADT-23.0.4.zip 2.进行安装,其中主要Android SDK和ADT安装时间比较长. 参考网址: http://www.open-ope

android开发学习笔记001a

Android 应用与开发环境 1.使用SDK版本:Android 2.3 . 2.发展和历史 创始人:Andy Rubin,Android公司被Google收购.07年11月5日1.0发布. 3.平台架构及特性 Linux内核(操作系统)->函数库,Android运行时(中间件)->应用程序框架->应用程序 我要学习的就是如何在android 操作系统里开发应用程序. 我们只和应用程序框架(Android API)打交道.也就是我们的SDK. 函数库是C/C++的库. Android

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的

Android开发学习之路--网络编程之xml、json

一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载xampp,然后安装之类的就不再多讲了,参考http://cnbin.github.io/blog/2015/06/05/mac-an-zhuang-he-shi-yong-xampp/.安装好后,启动xampp,之后在浏览器输入localhost或者127.0.0.1就可以看到如下所示了: 这个就

Android开发学习---使用XmlPullParser解析xml文件

Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1 一.创建一个XML项目,步骤如下: 二.解析一个xml文件: assets/person.xml <?xml version="1.0" encodi

Android开发学习---使用Intelij idea 13.1 进行android 开发

原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为什么放弃eclipse?太卡!! 实在受不了eclipse的卡了,运行WEB项目还好,但android开发实在太慢,太慢!经常卡死,CPU经常被占满! 看网上很多人都说比Intelij idea好用,就试下,目前还在test阶段,总之是各种不习惯,很多快捷键之类的跟eclipse完全不一样.还要多熟悉! 另外android studio 也比较卡,而且用起来相当难受,完全是intelij 的

【Android开发学习笔记】【第三课】Activity和Intent

首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activity的布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu