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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

android 之修改图片的某一颜色值
首先我们来创建一个叫Image的类,这个类主要用来处理与图有关的一些操作。

[java] n <span style="font-size:18px;">package .tools; n nn import java.io.IOException; n import java.io.InputStream; n import android.content.Context; n import android.graphics.Bitmap; n import
android.graphics.Matrix; n import android.graphics.Bitmap.Config; n import
android.graphics.BitmapFactory; n nn public class Image { n n n public Bitmap bitmap; n//图片资源对象 n n n /**n n n n* 通过id来获得图片 n n n n* @param contextn n n n* @param idn n n n*/ n n n public Image(Context context,int id){ n n n n n bitmap = BitmapFactory.decodeResource
(context.getResources(), id); n n n } n n n /**n n n n* 通过图片文件名来获得图片,主要用于图片在Asset目录下时n n n n* @param contextn n n n* @param name n n图片名n n n n* @param scaleW n图片宽的缩放比例n n n n* @param scaleH n图片高的缩放比例n n n n* @throws IOExceptionn n n n*/ n n n public Image(Context context,String name,float scaleW,float scaleH) throws IOException{ n n n n n InputStream is = context.getAssets().open(name); n n n n n bitmap = BitmapFactory.decodeStream (is); n n n n n is.close(); n n n n n bitmap = setScaleSize(bitmap, scaleW,scaleH); n n n } n n n public int getWidth(){ n n n n n return bitmap.getWidth(); n n n } n n n public int getHeight() { n n n n n return bitmap.getHeight(); n n n } n n n nn n n /**n n n n* 将bitmap的像素值放入数组n n n n* @param arrayn n n n* @param xn n n n* @param yn n n n* @returnn n n n*/ n n n public int[] getPixel(int[] array,int x,int y){ n n n n n bitmap.getPixels(array, 0, getWidth(), 0, 0, getWidth(), getHeight()); n n n n n return array; n n n } n n n /**n n n n* 通过一个像素数组创建Bitmapn n n n* @param arrayn n n n* @param wn n n n* @param hn n n n* @returnn n n n*/ n n n public Bitmap CreateImage(int[] array,int w,int h){ n n n n n Bitmap image = Bitmap.createBitmap (array, w, h, Config.RGB_565); n n n n n return image; n n n } n n n /**n n n n* 图片缩放n n n n* @param bitmapn n n n* @param arg0n n n n* @param arg1n n n n* @returnn n n n*/ n n n private Bitmap setScaleSize(Bitmap bitmap,float arg0,float arg1){ n n n n n Matrix matrix = new Matrix(); n n n n n matrix.postScale(arg0,arg1); n n n n n bitmap = Bitmap.createBitmap(bitmap, 0,
0,getWidth(),getHeight(), matrix,true); n n n n n return bitmap; n n n } n n n /**n n n n* 图片内存回收n n n n* n n n n* @param imagen n n n* @returnn n n n*/ n n n public static void free(Image image) { n n n n n try { n n n n n n n if(image.bitmap != null){ n n n n n n n n n if
(image.bitmap.isRecycled()==false) {//如果没有回收 n n n n n n n n n n n n //回收图片所占的内存 n n n n n n n n n n n image.bitmap.recycle(); n n n n n n n n n n n n if(image.bitmap.isRecycled() == true){ n n n n n n n n n n n n n image.bitmap = null; n n n n n n n n n n n } n n n n n n n n n }else{ n n n n n n n n n n n image.bitmap = null; n n n n n n n n n } n n n n n n n }else{ n n n n n n n n n image.bitmap = null; n n n n n n n n n //return null; n n n n n n n } n n n n n n n nn n n n n } catch (Exception e) { n n n n n n n e.printStackTrace(); n n n n n } n n n n
n //return image; n n n } n }</span> n n 创建完image处理类后我们便可以再activity里进行操作处理了,创建ImageAct.java.例子是将白色换为红色。

[java] n <span style="font-size:18px;">package
; n nn import java.io.IOException; n import ng.Character.UnicodeBlock; n import android.app.Activity; n import android.graphics.Bitmap; n import
android.graphics.drawable.BitmapDrawable; n import android.os.Bundle; n import android.view.View; n import android.view.View.OnClickListener; n import android.view.Window; n import
android.view.WindowManager; n import youtParams; n import
android.widget.ImageView; n nn public class ImageAct extends Activity { n n n Image image; n n n int len; n n n int red; n n n int greed; n n n int blue; n n n int apla; n n n int pix; n n n /** Called when the activity is first created. */ n n n @Override n n n public void onCreate(Bundle savedInstanceState) { n n n n n super.onCreate(savedInstanceState); n n n n n setContentView
(yout.main); n n n n n try { n n n n n n n image = new Image(this,
"Alfa_Romeo_8C_Competizione_Detail.png",1,1); n n n n n n n len = image.getWidth() *
image.getHeight(); n n n n n n n int[] imageARGB = new int[len]; n n n n n n n int[] newimage = new int[len]; n n n n n n n image.getPixel(imageARGB, 0, 0); n n n n n n n for (int i = 0; i < image.getHeight(); i++) n n n n n n n n n for (int j = 0; j < image.getWidth(); j++) { n n n n n n n n n n n if (imageARGB[i * image.getWidth() + j] != 0) { n n n n n n n n n n n n n //apla = ((imageARGB[i * image.getWidth() + j]&0xaa000000)>>24); n n n n n n n n n n n n n red = ((imageARGB[i * image.getWidth() + j] & 0x00ff0000) >> 16); n n n n n n n n n n n n n greed = ((imageARGB[i * image.getWidth() + j] & 0x0000ff00) >> 8); n n n n n n n n n n n n n blue = ((imageARGB[i * image.getWidth() + j] & 0x000000ff)); n n n n n n n n n n n n n // int apla = ((5 * 255 / 10) << 24) | 0x00ffffff; n n n n n n n n n n n n n if (red == 255 && greed == 255 & blue == 255) { n n n n n n n n n n n n n n n red = 255; n n n n n n n n n n n n n n n greed = 0; n n n n n n n n n n n n n n n blue = 0; n n n n n n n n n n n n n n n // pix =((red<<16)|(greed<<8)
|blue)&apla; n n n n n n n n n n n n n } n n n n n n n n n n n n n pix = (red << 16) | (greed << 8) | blue; n n n n n n n n n n n n n newimage[i * image.getWidth() + j] = pix; n n n n n n n n n n n } else n n n n n n n n n n n n n newimage[i * image.getWidth() + j] = imageARGB[i n n n n n n n n n n n n n n n n n * image.getWidth() + j]; n n n n n n n n n } n nn n n n n n n Bitmap bitmap = image.CreateImage(newimage, image.getWidth(), n n n n n n n n n n n image.getHeight()); n n n n n n n ((ImageView) findViewById(R.id.imageView1)).setImageBitmap(bitmap); n n n n n } catch (IOException e) { n n n n n n n // TODO Auto-generated catch block n n n n n n n
e.printStackTrace(); n n n n n } n nn n n } n }</span> n n ok通过上面的两个类就可以将图片里的白色转换为红色了。

相关文档
最新文档