先说一下调色的一些基本概念
图片的色彩主要由色相、饱和度、明度决定。色相主要是说色彩的变化,比如红色变化后变成绿色。饱和度是说颜色的鲜艳、丰富程度。而明度则是强调明暗,最暗则为全黑,最亮为全白。明度的概念比较好理解。下面用photoshop里的图片来说明色相和饱和度。
色相表现为色轮的旋转角度。
photo文本框中显示的值反映像素原来的颜色在色轮中旋转的度数。正值表示顺时针旋转,负值表示逆时针旋转。数值的范围可以从 -180 到 +180。
饱和度表现为距离色轮中心的距离
颜色相对于所选像素的起始颜色值,从色轮中心向外移动,或从外向色轮中心移动。数值的范围可以从 -100 到 +100。
明亮度则表现为RGB各分量的大小,0表示最暗,255表示最亮
java代码:
Bitmapshow; //这就是原始的图片
intflag; // 比特位0 表示是否改变色相,比位1表示是否改变饱和度,比特位2表示是否改变明亮度
int wi =show.getWidth(); //得到宽度
int he =show.getHeight(); //得到高度
Bitmap bmp =Bitmap.createBitmap(wi, he,Bitmap.Config.ARGB_8888);
//创建一个相同尺寸的可变的位图区,用于绘制调色后的图片
Canvas canvas = newCanvas(bmp); //得到画笔对象
Paint paint = newPaint(); //新建paint
paint.setAntiAlias(true); //设置抗锯齿,也即是边缘做平滑处理
ColorMatrix cm1=new ColotMatrix(); //用于颜色变换的矩阵,android 位图颜色变化处理主要是靠该对象完成
ColorMatrixcm2=new ColotMatrix();
ColorMatrix cm3=new ColotMatrix();
cm1.reset(); //设为默认值
if ((flag & 1) !=0) //需要改变色相
{
//hueColor就是色轮旋转的角度,正值表示顺时针旋转,负值表示逆时针旋转
cm1.setRotate(0, hueColor); //控制让红**在色轮上旋转hueColor葛角度
cm1.setRotate(1, hueColor); //控制让绿红**在色轮上旋转hueColor葛角度
cm1.setRotate(2, hueColor); //控制让蓝**在色轮上旋转hueColor葛角度
//这里相当于改变的是全图的色相
}
if ((flag & 2) !=0) //需要改变饱和度
{
//saturation 饱和度值,最小可设为0,此时对应的是灰度图(也就是俗话的“黑白图”),
//为1表示饱和度不变,设置大于1,就显示过饱和
cm2.reset();
cm2.setSaturation(saturation);
cm1.postConcat(cm2); //效果叠加
}
if ((flag & 4) !=0)
{
//f 表示亮度比例,取值小于1,表示亮度减弱,否则亮度增强
cm3.reset();
cm3.setScale(f, f, f, 1); //红、绿、蓝三分量按相同的比例,最后一个参数1表示透明度不做变化,此函数详细说明参考 android doc
cm1.postConcat(cm3); //效果叠加
}
paint.setColorFilter(new ColorMatrixColorFilter(cm1));//设置颜色变换效果
canvas.drawBitmap(show,0, 0, paint); //将颜色变化后的图片输出到新创建的位图区
returnbmp; //返回新的位图,也即调色处理后的图片
分享到:
相关推荐
标题所提及的“android动态改变图片颜色(纯色)”就是指在程序运行时,通过代码修改图片的单一颜色,使其适应不同的需求。但要注意的是,这种方法只适用于纯色图片,如果图片含有多种颜色,那么整个图片将被统一为...
本教程将深入探讨如何在Android应用运行时动态地改变由Shape定义的颜色值。 首先,我们需要了解如何在XML中创建一个基本的Shape。一个简单的Shape定义可能如下所示: ```xml <shape xmlns:android=...
要改变ListView选中行的字体颜色和图片,我们需要理解ListView的工作原理,以及如何自定义其Adapter和视图。以下是一些关键知识点的详细介绍: 1. **ListView的基本使用**: - ListView是一个视图容器,它能加载...
在 Android 开发中,bitmap 图片处理是一个非常重要的方面,特别是在图片颜色修改方面,今天我们将介绍如何实现把 bitmap 图片的某一部分的颜色改成其他颜色。 首先,我们需要了解什么是 bitmap 图片,bitmap 图片...
以下是一个简单的例子,展示如何通过`ColorMatrix`改变图片的亮度: ```java ColorMatrix colorMatrix = new ColorMatrix(); colorMatrix.set(new float[] { 1, 0, 0, 0, 50, // Red channel, add 50 to each ...
本教程将详细介绍如何在Android中自定义Seekbar,包括设置自定义图片和背景颜色。 首先,我们需要创建一个新的XML布局文件来定义自定义Seekbar。这个文件通常会放在res/layout目录下,例如命名为`custom_seekbar....
Android 开发中使用颜色矩阵改变图片颜色、透明度及亮度的方法 在 Android 开发中,图片处理是一项非常重要的技术,图片的颜色、透明度和亮度都是可以被改变的。通过使用颜色矩阵,可以实现图片颜色的改变。颜色...
我们可以创建一个自定义的主题来改变选中值的字体颜色。在Android的`styles.xml`文件中,定义一个新的主题,如: ```xml <item name="android:numberPickerStyle">@style/CustomNumberPicker ...
在Android开发中,改变按钮(Button)的背景颜色是一项常见的任务,这有助于为用户界面提供更丰富的视觉体验和更好的交互反馈。本教程将详细介绍如何在Android应用中动态地更改按钮的背景颜色。我们将探讨XML布局...
这个功能尤其适用于那些希望根据品牌调色板或用户选择的颜色动态改变UI的应用。 Palette库是Android SDK中的一个组件,它的主要任务是从Bitmap对象中分析和提取关键颜色。这通常涉及对图像进行采样,识别出最突出的...
- **纹理采样**:使用`glTexImage2D()`函数加载图片为纹理,通过改变纹理坐标或者应用纹理矩阵,可以实现颜色扭曲等效果。 5. **第三方库支持** - **Android-Image-Filter**:提供了一系列的图像滤镜,包括模糊、...
6. **资源管理**:考虑到颜色选择可能涉及到主题和风格的改变,开发者需要考虑如何保存和加载用户的颜色选择,可能涉及到SharedPreferences或其他持久化存储机制。 7. **性能优化**:由于颜色选择可能涉及到大量的...
- 当ScrollView滚动时,我们可以通过改变AppBarLayout的背景颜色来实现颜色渐变。可以使用`ArgbEvaluator`进行颜色值的插值计算,或者直接使用`ObjectAnimator`来创建颜色动画。 ```java int appBarColor = ...
另一种方法是使用StateListDrawable,它可以根据View的状态显示不同的图片或颜色。这样,你可以为正常状态和被点击状态分别定义背景颜色。 ```xml <!-- res/drawable/textview_background.xml --> ...
主题切换不仅可以改变字体颜色、背景色,还可以调整图片引用以及其他UI元素的样式,为用户提供个性化的视觉体验。本文将深入探讨如何在Android中实现主题切换功能。 一、理解Android主题 Android主题是在应用程序或...
本教程将详细讲解如何使用`TabLayout`结合`Fragment`来构建一个左右切换时文字颜色渐变的标签栏,并且支持自定义文字和图片。 首先,我们需要引入`TabLayout`的相关依赖。在`build.gradle`(Module: app)文件中...
默认情况下,BottomNavigationView会根据选中的菜单项改变图标颜色,这是通过设置`app:itemIconTint`属性来实现的。然而,如果图标的颜色已经包含在SVG或者PNG资源中,这个默认行为可能导致图标原本的颜色被覆盖,只...
6. **图片旋转**: 图片旋转功能可以使用`ExifInterface`读取和修改图片的EXIF信息,从而改变图片的方向。此外,还可以直接使用`Matrix`对象旋转`Bitmap`。 7. **图片压缩**: 图片压缩是为了减少内存占用和提高传输...
在Android开发中,实现圆角图片以及自定义边框颜色和大小的需求是非常常见的。这个压缩包文件"CircleImageView-master"很可能包含一个自定义的CircleImageView类,它扩展了Android原生的ImageView,提供了圆形显示...