Android之图片Bitmap的特殊处理

最近在做一个功能开发:当手指触摸屏幕的时候就出现一种特效。这里需要要五颜六色的图片来实现很绚丽效果,今天我来讲讲如何用一个简单图片如图(1)来实现如图(2)的效果!

(图1)

(图2)

由上面的(图1)可以知道其中的图象实际上是没有颜色的,其实就是白色和透明度来绘制的四个圆的效果图片!怎么才能实现右边图片的五颜六色的圆的图像呢!这里就是设计到了对bitmap图片处理!下面是对bitmap图片改变颜色的处理方法:

	public static Bitmap change_bitmap_for_curr_color(Bitmap curr_Bitmap, int new_color){
		if(null == curr_Bitmap){
			return curr_Bitmap;
		}
		int BLACK_COLOR = 0xff000000;

		int start_x = 0;
		int statr_y = 0;
		int bitmap_w = curr_Bitmap.getWidth();
		int bitmap_h = curr_Bitmap.getHeight();
		//Log.d("yu", "FingerMagic_tool change_bitmap_for_curr_color new_color="+new_color);//0xFFFF0000
		new_color &= 0x00ffffff;/× 去掉要改变颜色的透明度,这里只是改变该图片颜色,其透明度不改变 ×/
		//Log.d("FingerMagic_tool", "FingerMagic_tool change_bitmap_for_curr_color new_color="+new_color);
		int []pixels = new int[bitmap_w * bitmap_h];
		curr_Bitmap.getPixels(pixels, 0, bitmap_w, 0, 0, bitmap_w,bitmap_h);/× 这里是取出要改变bitmap的像素数据 ×/
		int alph = 0;
		int color_int = 0;
		int curr_index = 0;
		for(int i = 0; i < bitmap_h; i++){/× 这里就是改变取出的bitnap的像素数据,是其颜色是我们要改变的颜色 ×/
			for(int j = 0; j < bitmap_w; j++){
				curr_index = bitmap_w * i + j;
				color_int = pixels[curr_index];
				if(0 == color_int){  /× 如果该像素点没有颜色,全透明则不处理 ×/
					continue;
				}
				alph = color_int & BLACK_COLOR;  /× 取出该像素点的透明度值 ×/
				if(alph == 0){/× 如果这个像素点是全透明的则不做处理 ×/
					continue;
				}
				color_int = new_color | alph;/× 把我们需要的颜色加上该像素点的透明度来取代原来的像素点 ×/

				pixels[curr_index] = color_int;
			}

		}

                <pre name="code" class="java">                 /× 最后利用我们修改完成的像素数据值来创建我们需要的图片 ×/
		Bitmap result = Bitmap.createBitmap(pixels, bitmap_w, bitmap_h, Config.ARGB_8888);
		//result.setPixels(pixels, 0, bitmap_w, 0, 0, bitmap_w, bitmap_h);

		return result;
	}

这就可以了!所有的关键点,我都加上注释了。

不过,对于上面的代码还是存在缺陷的,请不要用来处理超大的bitmap, 很有可能溢出哦!还有,如果处理不只一个小图片,请开辟线程来处理哦。

时间: 2024-11-05 22:49:55

Android之图片Bitmap的特殊处理的相关文章

Android 设置图片 Bitmap任意透明度

两种思路,第一种思路是通过对Bitmap进行操作,将Bitmap的像素值get到一个int[]数组里,因为在android里Bitmap通常是ARGB8888格式,所以最高位就是A通道的值,对齐进行改变后再新建一个Bitmap即可.第二种思路是通过设置canvas的paint的透明度,然后通过canvas.drawBitmap()来改变View的透明度.具体代码如下: 第一种思路: public static Bitmap getTransparentBitmap(Bitmap sourceIm

android 将图片通过base64转换为String 将图片String转换为Bitmap

1.Bitmap转换为图片字符串 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //该方法用来压缩图片,第一个参数为图片格式,第二个参数为截取图片的保留率,如当前为90,则保留之前图片90%的区域 bitmap.compress(Bitmap

Android压缩图片和libjpeg库

前言 Fjpeg使用 Fjpeg 注意 如何使用 如何压缩图片只改变在硬盘的存储大小 如何改变图片分辨率让其Bitmap对象可以加载到内存中 关于重载版本 开始学习之旅 补充知识的结论 修改图片分辨率 防止在Android加载Bitmap的时候oom内存溢出 解决方案1 解决方案2 希望压缩图片方便网络传输 第一种方案利用Bitmapcompress方法压缩 第二种利用libjpeg压缩 在Android50测试两个 图片压缩 在Android60测试两个 图片压缩 解释Android50和60

Android圆形图片--自定义控件

Android圆形图片控件效果图如下: 代码如下: RoundImageView.java package com.dxd.roundimageview; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas

android 背景图片滚动

昨天在给客户端做天气展示页面的时候,发现很多app的天气页面背景图片都会缓慢移动,形成了一种3d的感觉.例如下雨,静态图片缓慢移动,雨滴位置变换感觉就真的在下雨.云朵的移动也很酷.于是研究了一下午.写了一个自定义view控件. 我的自定义控件继承了view,重写ondraw方法.本人C#转android才3个月,以下代码如有错或者有可以改进的地方,请各位在评论中指出.望不吝赐教! ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Android 之 图片压缩

在上一篇文章中(Android之图片变换)主要说明了bitmap的使用,当然其中也包括一点图片压缩的内容,但是没有详细描述,这篇文章就来阐述一下平时Android使用的图片压缩技术 从图片的压缩方式区分:质量压缩和尺寸压缩. 质量压缩是在保持像素的前提下改变图片的位深及透明度等,来达到压缩图片的目的,经过它压缩的图片文件大小会有改变,但是导入成bitmap后占得内存是不变的.因为要保持像素不变,所以它就无法无限压缩,到达一个值之后就不会继续变小了.显然这个方法并不适用与缩略图,其实也不适用于想通

Android批量图片加载经典系列——使用二级缓存、异步网络负载形象

一.问题描写叙述 Android应用中常常涉及从网络中载入大量图片,为提升载入速度和效率,降低网络流量都会採用二级缓存和异步载入机制.所谓二级缓存就是通过先从内存中获取.再从文件里获取,最后才会訪问网络.内存缓存(一级)本质上是Map集合以key-value对的方式存储图片的url和Bitmap信息.因为内存缓存会造成堆内存泄露, 管理相对复杂一些.可採用第三方组件,对于有经验的可自己编写组件,而文件缓存比較简单通常自己封装一下就可以. 以下就通过案例看怎样实现网络图片载入的优化. 二.案例介绍

Android压缩图片到100K以下并保持不失真的高效方法

在开发Android企业应用时,会经常上传图片到服务器,而我们公司目前维护的一个项目便是如此.该项目是通过私有apn与服务器进行交互的,联通的还好,但移动的速度实在太慢,客户在使用软件的过程中,由于上传的信息中可能包含多张图片,会经常出现上传图片失败的问题,为了解决这个问题,我们决定把照片压缩到100k以下,并且保证图片不失真(目前图片经过压缩后,大约300k左右).于是我就重新研究了一下Android的图片压缩技术. Android端目录结构如下图所示: 使用的第三方库jar包,如下图所示:

Android 设置图片倒影效果

首先,贴出效果图: 1.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_p