只是用来记录自己在学习android过程中的一些经验,写下来来梳理一下条理。
在android中显示一张图片是很容易的,只要在ImageView标签中设置一下就行了。但是在ImageView标签中是将图片写死的,如果遇到需要根据情况来显示一张图片就需要动态的更改一张图片。但是图片还是显示在ImageView标签中的,只是根据需要来载入显示一张图片。
android中可以使用Bitmap这个类处理图像。
首先 Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test1);这样可以将资源文件中的图片读入bitmap中。
然后通过mImageView.setImageBitmap(bitmap);这样来显示读入的图片,其中mImageView是我在xml文件中定义的ImageView标签的实例。
这是关于android中图像的读取以及显示。然后就需要来谈一谈在android中如何读一张图片进行处理了。
先是一种利用android给我们的ColorMatrix的类来对图片进行处理
/*
bm 原图
hue 修改后的色相值
saturation修改后的饱和度值
lum修改后的亮度值
*/
public static Bitmap handleImageEffect(Bitmap bm,float hue,float saturation,float lum)
{
//因为不能直接对原来的图片进行更改,所以需要创建一张与原来图片相同大小的图片来更改
Bitmap bmp=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),Bitmap.Config.ARGB_8888);
//在新建的图片上使用画布
Canvas canvas=new Canvas(bmp);
//new一支画笔出来在画布上进行作图,从而达到在新建的图片上进行修改的目的
Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
//调整色相色相,先new一个用来更改色相的颜色矩阵
ColorMatrix hueMatrix=new ColorMatrix();
//在色相的颜色矩阵中使用setRotate()方法,对RGB三个通道进行调整
hueMatrix.setRotate(0,hue);//参数0表示是R通道
hueMatrix.setRotate(1,hue);//参数1表示是G通道
hueMatrix.setRotate(2,hue);//参数2表示是B通道
//调整饱和度,new一个用来更改饱和度的颜色矩阵
ColorMatrix saturationMatrix=new ColorMatrix();
//使用setSaturation()方法将我们要更改的饱和度的值传进去
saturationMatrix.setSaturation(saturation);
//调整亮度,new一个用来更改亮度的颜色矩阵
ColorMatrix lumMatrix=new ColorMatrix();
//使用setScale()将我们要更改的亮度值传进去,本来应该对RGB三个通道进行更改的,为了方便就将三个通道的值设为一样的
lumMatrix.setScale(lum, lum, lum, 1);
//最后使用postConcat()方法将三个不同的更改颜色矩阵合并成一个
ColorMatrix imageMatrix=new ColorMatrix();
imageMatrix.postConcat(hueMatrix);
imageMatrix.postConcat(saturationMatrix);
imageMatrix.postConcat(lumMatrix);
//在画笔中应用这个最终合并成的颜色矩阵
paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix));
canvas.drawBitmap(bm,0,0,paint);
return bmp;
}
通过这样一个函数就能通过传入相应的更改值来达到对一张图片进行处理的目的。