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, 很有可能溢出哦!还有,如果处理不只一个小图片,请开辟线程来处理哦。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值