【网学网提醒】:网学会员为需要朋友们搜集整理了Android图片处理相关资料,希望对各位网友有所帮助!
packagecom.android.image.demo;
importjava.io.InputStream;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.LinearGradient;
importandroid.graphics.Paint;
importandroid.graphics.Path;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Shader;
importandroid.graphics.Typeface;
importandroid.os.Bundle;
importandroid.view.View;
publicclassAlphaBitmapextendsActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(newSampleView(this));
}
privatestaticclassSampleViewextendsView{
privateBitmapmBitmap;
privateBitmapmBitmap2;
privateBitmapmBitmap3;
privateShadermShader;
privatestaticvoiddrawIntoBitmap(Bitmapbm){
floatx=bm.getWidth();
floaty=bm.getHeight();
Canvasc=newCanvas(bm);
Paintp=newPaint();
/*Paint类的一个边缘光滑的方法,true表示边缘光滑*/
p.setAntiAlias(true);
p.setAlpha(0x80);//设置颜色透明度为十六进制80(半透明),0x00全透明,0xFF不透明
/*在位图矩阵区域内画一个相切的圆*/
c.drawCircle(x/2,y/2,x/2,p);
p.setAlpha(0x30);
/*用指定的PorterDuff模型创建xformode,PorterDuff.Mode.SRC
*表示下面要绘制的文本应在上面绘制的圆的上层
*/
p.setXfermode(newPorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC));
p.setTextSize(60);
/*Paint.Align是文本对齐方式的一个枚举类
*CENTER表示文本居中
*LEFT表示做对齐
*RIGHT表示右对齐
*/
p.setTextAlign(Paint.Align.CENTER);
/*FontMetrics是字体度量的类描述了给定文本大小的各种各样的字体度量。
*ascent表示到基准线之上的距离
*bottom表示到基准线之下的最大距离,它是最低的字体类型
*descent表示到基准线之下的距离
*leading空格字符到基准线的距离,为0
**/
Paint.FontMetricsfm=p.getFontMetrics();
c.drawText("Alpha",x/2,(y-fm.ascent)/2,p);
}
publicSampleView(Contextcontext){
super(context);
setFocusable(true);
/*取得资源文件的输入流*/
InputStreamis=context.getResources()
.openRawResource(R.drawable.qq);
/*BitmapFactory是位图的一个工厂类
*从各种各样的位图对象中创建位图对象,包括文
件,流,字节数组。
**/
mBitmap=BitmapFactory.decodeStream(is);
/*extractAlpha()位图的这个方法是通过提取
*了原始位图的透明通道值重建新的位图*/
mBitmap2=mBitmap.extractAlpha();
/*通过位图的宽度和高度已经位图的颜色配置来创建位图
*Bitmap.Config是内部枚举类表示位图的颜色配置
*它的颜色配置有ALPHA_8、ARGB_4444、ARGB_8888、RGB_565
**/
mBitmap3=Bitmap.createBitmap(200,200,Bitmap.Config.ALPHA_8);
drawIntoBitmap(mBitmap3);
/*LinearGradient类是Shader的一个子类,它实现的是一个线性梯度变化的一个
*着色器,(0,0)到(100,70)的直线式颜色梯度变化线
*这个梯度变化是在红绿蓝之间均匀变化的
*Shader.TileMode是超出梯度线的颜色变化模式
*CLAMP固定shader绘画时颜色超过原始边界(梯度线)的部分颜色用边界颜色绘制。
*REPEAT在水平和垂直方向重复使用着色器的色相,但边界分明
*MIRROR在水平和垂直方向重复使用着色器的色相,交换的映像色相使得邻
*近的色相总是一致;颜色关于梯度线镜像
**/
mShader=newLinearGradient(0,0,100,70,
newint[]{Color.RED,Color.GREEN,Color.BLUE},
null,Shader.TileMode.MIRROR);
}
@Override
protectedvoidonDraw(Canvascanvas){
canvas.drawColor(Color.WHITE);
Paintp=newPaint();
floaty=10;
/*设置画笔颜色为红色*/
p.setColor(Color.RED);
/*调用画布的drawBitmap方法在指定的位置用指定的画笔画指定的位图*/
canvas.drawBitmap(mBitmap,10,y,p);
/*设置下一个位图绘制的y坐标值*/
y+=mBitmap.getHeight()+10;
canvas.drawBitmap(mBitmap2,10,y,p);
y+=mBitmap2.getHeight()+10;
/*设置画笔的着色器*/
p.setShader(mShader);
canvas.drawBitmap(mBitmap3,10,y,p);
/*这个类主要装载了绘制直线曲线等的几何路径。*/
Pathpath=newPath();
/*画上面的梯度变化线*/
path.moveTo(0,0);
path.lineTo(100,70);
p.setColor(Color.RED);
/*Paint.Style画刷的样式枚举类
*STROKE只绘制笔画形状
*Fill填充
*FILL_AND_STROKE既画笔画又填充
**/
p.setStyle(Paint.Style.STROKE);
/*用指定的路径和指定的画刷画要求的路径*/
canvas.drawPath(path,p);
}
}
}