iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android图片色彩变换实现方法
  • 558
分享到

Android图片色彩变换实现方法

方法Android 2022-06-06 07:06:18 558人浏览 安东尼
摘要

最近在做图片相关的应用,所以就各方积累到一些常用的操作,一般来说会有多种方式来实现这一功能,比如  1.采用色度变换  2.采用ColORMatrix颜色矩

最近在做图片相关的应用,所以就各方积累到一些常用的操作,一般来说会有多种方式来实现这一功能,比如
 1.采用色度变换
 2.采用ColORMatrix颜色矩阵
 3.采用对像素点的直接操作
等等,今天就复习一下第一种方式吧,虽然比较单一,得到的结果类型也比较少。 

相比较于常见的图片风格变换,一般我们就是换个色彩度,饱和度,亮度等等,这里也恰恰是这个方式
编码思路:
 •抽象出图片操作工具
 •创建一个用于操作的Bitmap对象
 •使用画布canvas,画笔Paint
 •调色处理,参数控制
 •画出Bitmap并返回
 •被相关方法调用,得到结果 

下面直接上代码吧
首先是布局


<LinearLayout xmlns:Android="Http://schemas.android.com/apk/res/android"
 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" >
 <ImageView 
  android:id="@+id/imageview"
  android:layout_width="match_parent"
  android:layout_height="320dp"
  />
 <LinearLayout 
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  >
  <TextView 
   android:text="色 度"
   android:textSize="18dp"
   android:layout_weight="1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   />
  <SeekBar 
   android:id="@+id/hueBar"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_weight="5"
   />
 </LinearLayout>
 <LinearLayout 
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  >
  <TextView 
   android:text="饱和度"
   android:textSize="18dp"
   android:layout_weight="1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   />
  <SeekBar 
   android:id="@+id/saturationBar"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_weight="5"
   />
 </LinearLayout>
 <LinearLayout 
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  >
  <TextView 
   android:text="亮 度"
   android:textSize="18dp"
   android:layout_weight="1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   />
  <SeekBar 
   android:id="@+id/lumBar"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_weight="5"
   />
 </LinearLayout>
</LinearLayout>

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


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图片压缩的3种方法实例android中图片的三级缓存cache策略(内存/文件/网络)android imageview图片居中技巧应用android异步加载图片并缓存到本地实现方法Android Activity之间传递图片(Bitmap)的方法android文件上传示例分享(android图片上传)android bitmap compress(图片压缩)代码android保存Bitmap图片到指定文件夹示例Android实现本地上传图片并设置为圆形头像Android获取SD卡中选中图片的路径(URL)示例


--结束END--

本文标题: Android图片色彩变换实现方法

本文链接: https://www.lsjlt.com/news/24260.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现图片色彩转换案例
    目录前言环境依赖代码执行结果前言 本文提供将图片色彩转为黑白或者褐色风格。比较类似于我们在看动漫、影视作品中,当人物在回忆过程中,体现出来的画面一般都是黑白或者褐色的。 环境依赖 f...
    99+
    2024-04-02
  • 怎么用JAVA对彩色图片进行灰度变换
    这篇文章主要介绍“怎么用JAVA对彩色图片进行灰度变换”,在日常操作中,相信很多人在怎么用JAVA对彩色图片进行灰度变换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用JAVA对彩色图片进行灰度变换”的疑...
    99+
    2023-06-03
  • Android 定时器实现图片的变换
    Android 定时器实现图片的变换在Android中,要让每秒进行一次ui更新,就需要利用到定时器和handler,message的结合,如果不使用handler就不能达到更新ui的效果,我的理解是handler中存在一个队列问题,可以保...
    99+
    2023-05-30
    android 定时器 roi
  • java实现切图并且判断图片是不是纯色/彩色图片
    整理文档,搜刮出一个java实现切图并且判断图片是否是纯色/彩色图片的代码,稍微整理精简一下做下分享。首先上切图的代码 public static void imageCut(int x, int y, int width, int he...
    99+
    2023-05-31
    java 切图 ava
  • 让web网页图片变灰色将彩色图像变成灰度的三种方法分别是怎样的
    让web网页图片变灰色将彩色图像变成灰度的三种方法分别是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 ...
    99+
    2024-04-02
  • css如何实现默认图片是灰色鼠标放上去变彩色的效果
    小编给大家分享一下css如何实现默认图片是灰色鼠标放上去变彩色的效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!默认图片是灰色鼠标放上去变彩色css效果代码a img{filter:gray} a:h...
    99+
    2023-06-27
  • Python OpenCV 彩色与灰度图像的转换实现
    彩色图像转换为灰度图像 第一种方式通过 imread 读取图像的时候直接设置参数为 0 ,自动转换彩色图像为灰度图像 第二种方式,可以通过 split 进行通道分离,或者叫做读取单个...
    99+
    2024-04-02
  • Python+Pytorch实战之彩色图片识别
    目录一、 前期准备1. 设置GPU2. 导入数据3. 数据可视化二、构建简单的CNN网络三、 训练模型1. 设置超参数2. 编写训练函数3. 编写测试函数4. 正式训练四、 结果可视...
    99+
    2024-04-02
  • python实现求纯色彩图像的边框的方法
    这篇文章主要讲解了“python实现求纯色彩图像的边框的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python实现求纯色彩图像的边框的方法”吧!python是什么意思Python是一...
    99+
    2023-06-14
  • python opencv实现灰度图和彩色图的互相转换
    目录opencv灰度图和彩色图互相转换注意:附:python将灰度图转换为RGB彩色图总结opencv灰度图和彩色图互相转换 如果摄像头本来就得到3维度红外图那就不用处理直接可以用:...
    99+
    2024-04-02
  • Python中OpenCV彩色与灰度图像转换的方法
    这篇文章主要介绍Python中OpenCV彩色与灰度图像转换的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!彩色图像转换为灰度图像第一种方式通过 imread 读取图像的时候直接设置参数为 0 ,自动转换彩色图像...
    99+
    2023-06-15
  • android怎么实现点击图片切换图片
    在 Android 中,可以通过给 ImageView 添加点击事件来实现点击图片切换图片的功能。下面是一个示例代码:1. 在 XM...
    99+
    2023-08-18
    android
  • 基于JAVA和百度AI黑白图片变彩色系统设计与实现
    【后台管理员功能】 系统设置:设置网站简介、关于我们、联系我们、加入我们、法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息,支持删除 资讯分类:录入、修改、查看、删...
    99+
    2023-09-01
    小程序 微信小程序
  • matlab彩色直方图均衡化怎么实现
    要在MATLAB中实现彩色直方图均衡化,可以按照以下步骤进行操作:1. 读取彩色图像:使用`imread`函数读取原始彩色图像,例如...
    99+
    2023-09-12
    matlab
  • javascript实现图片切换的方法
    小编给大家分享一下javascript实现图片切换的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript实现图片切换的方法:首先新建文件,使用i...
    99+
    2023-06-14
  • Android实现圆角图片的方法
    本文实例为大家分享了Android实现圆角图片的具体代码,供大家参考,具体内容如下 效果图 创建类CustomRoundAngleImageView public class ...
    99+
    2024-04-02
  • php如何实现色彩空间转换
    本篇内容主要讲解“php如何实现色彩空间转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何实现色彩空间转换”吧!php实现色彩空间转换的方法:首先创建一个PHP示例文件;然后创建“HS...
    99+
    2023-06-20
  • javascript让图片自动变换的方法
    这篇文章主要介绍了javascript让图片自动变换的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法:1、创建图片路径数组;2、用timeInterval定义切换时间...
    99+
    2023-06-14
  • Android利用Palette实现提取图片颜色
    目录前言创建Palette提取颜色文字颜色自动适配更多功能总结前言 Palette即调色板这个功能其实很早就发布了,Jetpack同样将这个功能也纳入其中,想要使用这个功能,需要先依...
    99+
    2024-04-02
  • Android怎么用Palette实现提取图片颜色
    本文小编为大家详细介绍“Android怎么用Palette实现提取图片颜色”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么用Palette实现提取图片颜色”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作