android – 将Saturation和ColorFilter设置为同时成像

android – 将Saturation和ColorFilter设置为同时成像,第1张

概述以下功能可成功更改图像中的对比度和亮度. Bitmap bmp;ImageView alteredImageView;...public void drawAlteredImage(float contr,float bright) { Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight() 以下功能可成功更改图像中的对比度和亮度.

Bitmap bmp;ImageVIEw alteredImageVIEw;...public voID drawAlteredImage(float contr,float bright) {    Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWIDth(),bmp.getHeight(),bmp.getConfig());    Canvas canvas = new Canvas(alteredBitmap);    Paint paint = new Paint();    colorMatrix cm = new colorMatrix();    cm.set(new float[] {             contr,bright,contr,1,0 });    paint.setcolorFilter(new colorMatrixcolorFilter(cm));    Matrix matrix = new Matrix();    canvas.drawBitmap(bmp,matrix,paint);    alteredImageVIEw.setimageBitmap(alteredBitmap);}

但是当我向colorMatrix添加setSaturation方法时,对比度和亮度变化不再起作用.代码:

public voID drawAlteredImage(float contr,float bright,float satur) {    Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWIDth(),0 });    cm.setSaturation(satur);    paint.setcolorFilter(new colorMatrixcolorFilter(cm));    Matrix matrix = new Matrix();    canvas.drawBitmap(bmp,paint);    alteredImageVIEw.setimageBitmap(alteredBitmap);}

在这种情况下,仅应用饱和效应.为什么会出现这个问题?我该如何解决?

解决方法 setSaturation(…)方法替换矩阵中的所有值.您可以创建一个结合两个 *** 作的矩阵,也可以使用两个单独的drawBitmap(…)调用来执行 *** 作.

尝试:

cm.setSaturation(satur);final float m[] = cm.getArray();final float c = contr;cm.set(new float[] {         m[ 0] * c,m[ 1] * c,m[ 2] * c,m[ 3] * c,m[ 4] * c + bright,m[ 5] * c,m[ 6] * c,m[ 7] * c,m[ 8] * c,m[ 9] * c + bright,m[10] * c,m[11] * c,m[12] * c,m[13] * c,m[14] * c + bright,m[15],m[16],m[17],m[18],m[19] });
总结

以上是内存溢出为你收集整理的android – 将Saturation和ColorFilter设置为同时成像全部内容,希望文章能够帮你解决android – 将Saturation和ColorFilter设置为同时成像所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1121850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存