1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android将彩图转为黑白_[Android学习笔记九] Android 开发中图片灰阶(黑白)显示...

android将彩图转为黑白_[Android学习笔记九] Android 开发中图片灰阶(黑白)显示...

时间:2022-07-21 20:19:56

相关推荐

android将彩图转为黑白_[Android学习笔记九] Android 开发中图片灰阶(黑白)显示...

阅读本文之前关于将RGB颜色值转换为灰阶值的计算方法可参见:

灰阶显示图片的典型应用就是用户头像,如用户在线头像显示彩色(原图),不在线显示灰色(黑白图)。总结一点就是更加一张原始图片来通过颜色的过滤处理计算得到不同显示效果的图片。这方法的API主要位于:android.

使用上文中提到的“三种算法转换彩色灰阶”一文中提到的灰阶计算方法产生的黑白图片显示效果如下图:

说明:通过Use Matrix是使用Android的ColorMatrix和ColorFilter实现,其中设置ColorMatrix的setSaturation(float sat)饱和度设置为0时颜色过滤之后显示灰阶,android.graphics.ColorMatrix的内部实现和具体RGB颜色权重值近似等于图中BT709中的权重。

代码示例(依赖此文中附加的灰阶计算方法封装类)

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_grayscale);

ButterKnife.bind(this);

BitmapDrawablebd=(BitmapDrawable)Original_ImageView.getDrawable();

Bitmapbitmap=bd.getBitmap();

Log.d(TAG,"w="+bitmap.getWidth()+",h="+bitmap.getHeight()+",c="+bitmap.getConfig().toString());

//0BT709

Bitmapmatrix=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888);

Canvascanvas=newCanvas(matrix);

Paintpaint=newPaint();

ColorMatrixcolorMatrix=newColorMatrix();

//传入一个大于1的数字将增加饱和度,而传入一个0~1之间的数字会减少饱和度。0值将产生一幅灰度图像

//AndroidColorMatrix默认的灰阶计算采用下面的BT709标准

colorMatrix.setSaturation(0f);

ColorMatrixColorFiltercolorMatrixColorFilter=newColorMatrixColorFilter(colorMatrix);

paint.setColorFilter(colorMatrixColorFilter);

canvas.drawBitmap(bitmap,0f,0f,paint);

Matrix_ImageView.setImageBitmap(matrix);

//原始图片

Bitmapsunflower=XUtils.BitmapUtil.decodeMutableBitmapFromResourceId(this,R.drawable.sunflower);

//1

Bitmaplightness=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Lightness);

Lightness_ImageView.setImageBitmap(lightness);

//2

Bitmapaverage=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Average);

Average_ImageView.setImageBitmap(average);

//3

Bitmapluminosity=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Luminosity);

Luminosity_ImageView.setImageBitmap(luminosity);

//4

Bitmapbt709=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.BT709);

BT709_ImageView.setImageBitmap(bt709);

//5

Bitmaprmy=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.RMY);

RMY_ImageView.setImageBitmap(rmy);

//6

Bitmapy=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Y);

Y_ImageView.setImageBitmap(y);

}

publicBitmapgrayScale(finalBitmapbitmap,XUtils.GrayScaleUtil.GrayScalegrayScale){

if(null==bitmap||null==grayScale){

returnnull;

}

Bitmaprs=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888);

Canvascanvas=newCanvas(rs);

Paintpaint=newPaint();

for(intx=0,w=bitmap.getWidth();x

for(inty=0,h=bitmap.getHeight();y

intc=bitmap.getPixel(x,y);

inta=Color.alpha(c);

intr=Color.red(c);

intg=Color.red(c);

intb=Color.blue(c);

intgc=grayScale.grayScale(r,g,b);

paint.setColor(Color.argb(a,gc,gc,gc));

canvas.drawPoint(x,y,paint);

}

}

returnrs;

}

关于ColorMatrix的介绍参见Android document :

本地:${SDK}/docs/reference/android/graphics/ColorMatrix.html

参考信息:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。