android 之修改图片的某一颜色值

首先我们来创建一个叫Image的类,这个类主要用来处理与图有关的一些操作。

package org.cn.tools;

import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;

public class Image {
	public Bitmap bitmap;  //图片资源对象
	/**
	 * 通过id来获得图片 
	 * @param context
	 * @param id
	 */
	public Image(Context context,int id){
	  	bitmap = BitmapFactory.decodeResource(context.getResources(), id);
	}
	/**
	 * 通过图片文件名来获得图片,主要用于图片在Asset目录下时
	 * @param context
	 * @param name    图片名
	 * @param scaleW  图片宽的缩放比例
	 * @param scaleH  图片高的缩放比例
	 * @throws IOException
	 */
	public Image(Context context,String name,float scaleW,float scaleH) throws IOException{
		InputStream is = context.getAssets().open(name);
		bitmap = BitmapFactory.decodeStream(is);
		is.close();
		bitmap = setScaleSize(bitmap, scaleW,scaleH);
	}
	public int getWidth(){
		return bitmap.getWidth();
	}
	public int getHeight(){
		return bitmap.getHeight();
	}
	
	/**
	 * 将bitmap的像素值放入数组
	 * @param array
	 * @param x
	 * @param y
	 * @return
	 */
	public int[] getPixel(int[] array,int x,int y){
		bitmap.getPixels(array, 0, getWidth(), 0, 0, getWidth(), getHeight());
		return array;
	}
	/**
	 * 通过一个像素数组创建Bitmap
	 * @param array
	 * @param w
	 * @param h
	 * @return
	 */
	public Bitmap CreateImage(int[] array,int w,int h){
		Bitmap image = Bitmap.createBitmap(array, w, h, Config.RGB_565);
		return image;
	}
	/**
	 * 图片缩放
	 * @param bitmap
	 * @param arg0
	 * @param arg1
	 * @return
	 */
	private Bitmap setScaleSize(Bitmap bitmap,float arg0,float arg1){
		Matrix matrix = new Matrix();
		matrix.postScale(arg0,arg1);
		bitmap = Bitmap.createBitmap(bitmap, 0, 0,getWidth(),getHeight(), matrix,true);
		return bitmap;
	}
	/**
	 * 图片内存回收
	 * 
	 * @param image
	 * @return
	 */
	public static void free(Image image) {
		try {
			if(image.bitmap != null){
				if(image.bitmap.isRecycled()==false) {//如果没有回收  
					//回收图片所占的内存
					image.bitmap.recycle();  
					if(image.bitmap.isRecycled()== true){
						image.bitmap = null;
					}
				}else{
					image.bitmap = null;
				}
			}else{
				image.bitmap = null;
				//return null;
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		//return image;
	}
}


创建完image处理类后我们便可以再activity里进行操作处理了,创建ImageAct.java.例子是将白色换为红色。

package org.cn;

import java.io.IOException;
import java.lang.Character.UnicodeBlock;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;

public class ImageAct extends Activity {
	Image image;
	int len;
	int red;
	int greed;
	int blue;
	int apla;
	int pix;
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		try {
			image = new Image(this, "Alfa_Romeo_8C_Competizione_Detail.png",1,1);
			len = image.getWidth() * image.getHeight();
			int[] imageARGB = new int[len];
			int[] newimage = new int[len];
			image.getPixel(imageARGB, 0, 0);
			for (int i = 0; i < image.getHeight(); i++)
				for (int j = 0; j < image.getWidth(); j++) {
					if (imageARGB[i * image.getWidth() + j] != 0) {
						//apla = ((imageARGB[i * image.getWidth() + j]&0xaa000000)>>24);
						red = ((imageARGB[i * image.getWidth() + j] & 0x00ff0000) >> 16);
						greed = ((imageARGB[i * image.getWidth() + j] & 0x0000ff00) >> 8);
						blue = ((imageARGB[i * image.getWidth() + j] & 0x000000ff));
						// int apla = ((5 * 255 / 10) << 24) | 0x00ffffff;
						if (red == 255 && greed == 255 & blue == 255) {
							red = 255;
							greed = 0;
							blue = 0;
							// pix =((red<<16)|(greed<<8)|blue)&apla;
						}
						pix = (red << 16) | (greed << 8) | blue;
						newimage[i * image.getWidth() + j] = pix;
					} else
						newimage[i * image.getWidth() + j] = imageARGB[i
								* image.getWidth() + j];
				}

			Bitmap bitmap = image.CreateImage(newimage, image.getWidth(),
					image.getHeight());
			((ImageView) findViewById(R.id.imageView1)).setImageBitmap(bitmap);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

ok通过上面的两个类就可以将图片里的白色转换为红色了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值