最近在做图片相关的应用,所以就各方积累到一些常用的操作,一般来说会有多种方式来实现这一功能,比如

1.采用色度变换

2.采用ColorMatrix颜色矩阵

3.采用对像素点的直接操作

等等,今天就复习一下第一种方式吧,虽然比较单一,得到的结果类型也比较少。

相比较于常见的图片风格变换,一般我们就是换个色彩度,饱和度,亮度等等,这里也恰恰是这个方式

编码思路:

•抽象出图片操作工具类

•创建一个用于操作的Bitmap对象

•使用画布Canvas,画笔Paint

•调色处理,参数控制

•画出Bitmap并返回

•被相关方法调用,得到结果

下面直接上代码吧

首先是布局

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:orientation="vertical"

tools:context=".MainActivity" >

android:id="@+id/imageview"

android:layout_width="match_parent"

android:layout_height="320dp"

/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

>

android:text="色 度"

android:textSize="18dp"

android:layout_weight="1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

android:id="@+id/hueBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="5"

/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

>

android:text="饱和度"

android:textSize="18dp"

android:layout_weight="1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

android:id="@+id/saturationBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="5"

/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

>

android:text="亮 度"

android:textSize="18dp"

android:layout_weight="1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

android:id="@+id/lumBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="5"

/>

接下来是工具操作类的相关方法

public static Bitmap handleImageLikePS(Bitmap bp,float hue,float saturation,float lum){

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

Canvas canvas=new Canvas(bitmap);

Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);

ColorMatrix hueMatrix=new ColorMatrix();

hueMatrix.setRotate(0, hue);

hueMatrix.setRotate(1, hue);

hueMatrix.setRotate(2, hue);

ColorMatrix saturationMatrix=new ColorMatrix();

saturationMatrix.setSaturation(saturation);

ColorMatrix lumMatrix=new ColorMatrix();

lumMatrix.setScale(lum,lum,lum,1);

ColorMatrix imageMatrix=new ColorMatrix();

imageMatrix.postConcat(hueMatrix);

imageMatrix.postConcat(saturationMatrix);

imageMatrix.postConcat(lumMatrix);

paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix));

canvas.drawBitmap(bp, 0, 0, paint);//此处如果换成bitmap就会仅仅调用一次,图像将不能被编辑

return bitmap;

}

然后是使用类

package com.example.colormatrixdemo;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.widget.ImageView;

import android.widget.SeekBar;

public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener{

private Bitmap bitmap;

private ImageView imageview;

private SeekBar hueBar,saturationBar,lumBar;

private float mHue,mSaturation ,mLum;

private static int MAXVALUE=255,MIDVALUE=127;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.masuo);

imageview=(ImageView) findViewById(R.id.imageview);

hueBar=(SeekBar) findViewById(R.id.hueBar);

saturationBar=(SeekBar) findViewById(R.id.saturationBar);

lumBar=(SeekBar) findViewById(R.id.lumBar);

hueBar.setOnSeekBarChangeListener(this);

saturationBar.setOnSeekBarChangeListener(this);

lumBar.setOnSeekBarChangeListener(this);

hueBar.setMax(MAXVALUE);

hueBar.setProgress(MIDVALUE);

saturationBar.setMax(MAXVALUE);

saturationBar.setProgress(MIDVALUE);

lumBar.setMax(MAXVALUE);

lumBar.setProgress(MIDVALUE);

imageview.setImageBitmap(bitmap);

}

@Override

public void onProgressChanged(SeekBar seekbar, int progress, boolean arg2) {

switch(seekbar.getId()){

case R.id.hueBar:

mHue=(progress-MIDVALUE)*1.0F/MIDVALUE*180;

break;

case R.id.saturationBar:

mSaturation=progress*1.0F/MIDVALUE;

break;

case R.id.lumBar:

mLum=progress*1.0F/MIDVALUE;

break;

}

imageview.setImageBitmap(ImageTools.handleImageLikePS(bitmap, mHue, mSaturation, mLum));

}

@Override

public void onStartTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

}

@Override

public void onStopTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

}

}

然后运行程序,你就可以通过对滑动条的调节来对图像做相关的处理变换了。

注意:

在工具类的方法中最后要对传进去的参数做处理,而不是我们自己声明的bitmap,否则我们将得不到我们实时的图片效果。因为我们的bitmap仅仅是作为一个操作的对象模型,真正需要操作的是我们的bp参数。

总结:在处理图像有许多的方法,尤其是对图像用像素点的方式效果最多,可以呈现多种多样的效果。如老照片,浮雕,底片等等;而采用颜色矩阵也是一种好经典的操作方法。这些很值得我们学习,这样我们就可以是的我们的应用呈现出更加绚丽的色彩及效果咯!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android点击图片变色,Android图片色彩变换实现方法相关推荐

  1. android 点击爱心变色,Android 爱心万花筒简单实现

    七夕将至,来个应景的爱心万花筒. 效果图: Kaleidoscope2.gif 使用简单,无侵入,提供一个 Activity 或者 FrameLayout 即可: // 简单做法: Kaleidosc ...

  2. Android点击WebView中的图片查看大图

    Android点击WebView中的图片查看大图 WebView加载Html文本加载图片并同时实现获取图片下标 首先加载html文本 web_view.loadDataWithBaseURL(null ...

  3. android 点击按钮来回切换图片

    android 点击切换图片 适合初学者,没什么好说的,很简单,不过方法我觉得挺精妙的. 1.添加图片 气死我了,选下面那个会报错(好像是因为分辨率太高(?)还是像素太高,忘了) activity_m ...

  4. android 点击网络图片大全,android查看网络图片的实现方法

    本文实例为大家分享了android查看网络图片的具体代码,供大家参考,具体内容如下 需求描述: 输入一个 图片地址,下载到本地 展示. 效果展示 代码清单 MainActivity.java pack ...

  5. Android点击无响应,Android Studio无响应打不开的解决办法

    最近谷歌发布了Android Studio,下载安装之后,在使用时发现一个问题,那就是发布无响应且无法启动,也就是点击Android图标的时候没有任务反应,我想说的是你需要重新配置一下环境~ 因为这个 ...

  6. android点击按钮弹出图片,用android做的一个简单的点击按钮显示图片的程序

    其实,在这之前我已经做了一个点击按钮的小程序,只不过它只是用来在界面上显示一些文字或者是用一个对话框来显示内容.按理说,做显示图片应该是不会有太大的问题了,可是问题还是来了.在我把这些个问题解决之后, ...

  7. gif android 点击 加载,android 加载显示gif图片的解决方案

    使用方法: 1-把GifView.jar加入你的项目. 2-在xml中配置GifView的基本属性,GifView继承自View类,和Button.ImageView一样是一个UI控件.如: andr ...

  8. android 点击爱心变色,小程序学习(一):点击爱心变色 -- 最简单的事件实现

    最近在学习小程序,想通过写文章来记录自己的学习历程,希望能做到每周都写-- 如何绑定一个事件 微信小程序中,绑定事件要在标签内写入这两段代码: bindtap="fnActive" ...

  9. android 点击爱心变色,小程序学习(一):点击爱心变色最简单的事件实现

    最近在学习小程序,想通过写文章来记录自己的学习历程,希望能做到每周都写-- 如何绑定一个事件 微信小程序中,绑定事件要在标签内写入这两段代码:bindtap="fnActive"d ...

最新文章

  1. CentOS 部署 flask项目
  2. Android Memory Management
  3. Android属性动画 AnimatorSet
  4. 解决Ubuntu17.04不能安装git的问题 E: Package 'git' has no installation candidate
  5. Redis从入门到精通,至少要看看这篇!
  6. 面试官 | 什么是递归算法?它有什么用?
  7. idea mysql错误提示_idea提示错误:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  8. Silverlight实用窍门系列:28.Silverlight制作随机分布雷达扫描点,模拟雷达扫描图之被扫描设备【附带源码实例】...
  9. BubbleSort 优化后的冒泡排序算法
  10. 20151129基本语法元素
  11. 7.1 pdo 宝塔面板php_腾讯云服务器建站系列 – 熟练宝塔面板部署网站/快速安装HTTPS加密...
  12. 复旦大学陈平博士:网络攻击猖獗,如何应对数据安全与内生安全挑战?
  13. 什么是ARM开发板及其硬件特性介绍
  14. windows和linux共用蓝牙鼠标,Linux 与 Windows 双系统共享蓝牙鼠标
  15. CSS实现鼠标经过div时改变背景图片
  16. CSS中的BFC规范(块级格式化上下文)
  17. 2020中国邮政总行信息技术岗校招笔试经历
  18. Linux 系统管理 : last 命令详解
  19. 两台计算机如何连接成网络错误,常见网络(连接)错误的解决方法
  20. 聊天机器人-意图识别类,开源库推荐

热门文章

  1. Js中类似抽奖活动案例
  2. 什么是sso单点登录?
  3. iOS绘图——Quartz 2D使用方法
  4. LeetCode--分发饼干(贪心)
  5. 欢聚时代YY招聘 | 遇见offer之就要圆你的大厂梦
  6. java逆向工程_JAVA语言:详解MyBatis逆向工程[Java代码]
  7. 上篇日本人经营之道 一先予人以利尔后自己得利
  8. 【Linux】Ubuntu中文输入法的配置和系统时间的设置
  9. steamos访问linux桌面,Linux独享,Valve SteamOS开放申请下载
  10. java和C语言是什么关系,哪一种好?