Android图片色彩变幻
生活随笔
收集整理的這篇文章主要介紹了
Android图片色彩变幻
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近在做圖片相關(guān)的應(yīng)用,所以就各方積累到一些常用的操作,一般來說會有多種方式來實現(xiàn)這一功能,比如
等等,今天就復(fù)習(xí)一下第一種方式吧,雖然比較單一,得到的結(jié)果類型也比較少。
相比較于常見的圖片風(fēng)格變換,一般我們就是換個色彩度,飽和度,亮度等等,這里也恰恰是這個方式
編碼思路:
- 抽象出圖片操作工具類
- 創(chuàng)建一個用于操作的Bitmap對象
- 使用畫布Canvas,畫筆Paint
- 調(diào)色處理,參數(shù)控制
- 畫出Bitmap并返回
- 被相關(guān)方法調(diào)用,得到結(jié)果
下面直接上代碼吧
首先是布局
接下來是工具操作類的相關(guān)方法
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就會僅僅調(diào)用一次,圖像將不能被編輯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;@Overrideprotected 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);}@Overridepublic 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));}@Overridepublic void onStartTrackingTouch(SeekBar arg0) {// TODO Auto-generated method stub}@Overridepublic void onStopTrackingTouch(SeekBar arg0) {// TODO Auto-generated method stub}}然后運行程序,你就可以通過對滑動條的調(diào)節(jié)來對圖像做相關(guān)的處理變換了。
注意:
在工具類的方法中最后要對傳進(jìn)去的參數(shù)做處理,而不是我們自己聲明的bitmap,否則我們將得不到我們實時的圖片效果。因為我們的bitmap僅僅是作為一個操作的對象模型,真正需要操作的是我們的bp參數(shù)。
總結(jié):在處理圖像有許多的方法,尤其是對圖像用像素點的方式效果最多,可以呈現(xiàn)多種多樣的效果。如老照片,浮雕,底片等等;而采用顏色矩陣也是一種好經(jīng)典的操作方法。這些很值得我們學(xué)習(xí),這樣我們就可以是的我們的應(yīng)用呈現(xiàn)出更加絢麗的色彩及效果咯!
總結(jié)
以上是生活随笔為你收集整理的Android图片色彩变幻的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android天天飞车游戏辅助系统
- 下一篇: 安装安全防护软件有助于保护计算机不受侵害