转自:http://blog.csdn.net/luohai859/article/details/25388441
原图:
处理后:
下面贴代码:
一、图片处理层:
-
packagecom.jacp.tone.view;
-
-
importjava.util.ArrayList;
-
-
importandroid.content.Context;
-
importandroid.graphics.Bitmap;
-
importandroid.graphics.Canvas;
-
importandroid.graphics.ColorMatrix;
-
importandroid.graphics.ColorMatrixColorFilter;
-
importandroid.graphics.Paint;
-
importandroid.view.Gravity;
-
importandroid.view.View;
-
importandroid.widget.LinearLayout;
-
importandroid.widget.SeekBar;
-
importandroid.widget.SeekBar.OnSeekBarChangeListener;
-
importandroid.widget.TextView;
-
-
importcom.jacp.tone.R;
-
-
-
-
-
-
-
publicclassToneLayer{
-
-
-
-
-
publicstaticfinalintFLAG_SATURATION=0x0;
-
-
-
-
-
publicstaticfinalintFLAG_LUM=0x1;
-
-
-
-
-
publicstaticfinalintFLAG_HUE=0x2;
-
-
-
-
-
privateTextViewmSaturation;
-
privateSeekBarmSaturationBar;
-
-
-
-
-
privateTextViewmHue;
-
privateSeekBarmHueBar;
-
-
-
-
-
privateTextViewmLum;
-
privateSeekBarmLumBar;
-
-
privatefloatmDensity;
-
privatestaticfinalintTEXT_WIDTH=50;
-
-
privateLinearLayoutmParent;
-
-
privateColorMatrixmLightnessMatrix;
-
privateColorMatrixmSaturationMatrix;
-
privateColorMatrixmHueMatrix;
-
privateColorMatrixmAllMatrix;
-
-
-
-
-
privatefloatmLumValue=1F;
-
-
-
-
-
privatefloatmSaturationValue=0F;
-
-
-
-
-
privatefloatmHueValue=0F;
-
-
-
-
-
privatestaticfinalintMIDDLE_VALUE=127;
-
-
-
-
-
privatestaticfinalintMAX_VALUE=255;
-
-
privateArrayList<SeekBar>mSeekBars=newArrayList<SeekBar>();
-
-
publicToneLayer(Contextcontext){
-
init(context);
-
}
-
-
privatevoidinit(Contextcontext){
-
mDensity=context.getResources().getDisplayMetrics().density;
-
-
mSaturation=newTextView(context);
-
mSaturation.setText(R.string.saturation);
-
mHue=newTextView(context);
-
mHue.setText(R.string.contrast);
-
mLum=newTextView(context);
-
mLum.setText(R.string.lightness);
-
-
mSaturationBar=newSeekBar(context);
-
mHueBar=newSeekBar(context);
-
mLumBar=newSeekBar(context);
-
-
mSeekBars.add(mSaturationBar);
-
mSeekBars.add(mHueBar);
-
mSeekBars.add(mLumBar);
-
-
for(inti=0,size=mSeekBars.size();i<size;i++){
-
SeekBarseekBar=mSeekBars.get(i);
-
seekBar.setMax(MAX_VALUE);
-
seekBar.setProgress(MIDDLE_VALUE);
-
seekBar.setTag(i);
-
}
-
-
LinearLayoutsaturation=newLinearLayout(context);
-
saturation.setOrientation(LinearLayout.HORIZONTAL);
-
saturation.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
-
-
LinearLayout.LayoutParamstxtLayoutparams=newLinearLayout.LayoutParams((int)(TEXT_WIDTH*mDensity),LinearLayout.LayoutParams.MATCH_PARENT);
-
mSaturation.setGravity(Gravity.CENTER);
-
saturation.addView(mSaturation,txtLayoutparams);
-
-
LinearLayout.LayoutParamsseekLayoutparams=newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
-
saturation.addView(mSaturationBar,seekLayoutparams);
-
-
LinearLayouthue=newLinearLayout(context);
-
hue.setOrientation(LinearLayout.HORIZONTAL);
-
hue.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
-
-
mHue.setGravity(Gravity.CENTER);
-
hue.addView(mHue,txtLayoutparams);
-
hue.addView(mHueBar,seekLayoutparams);
-
-
LinearLayoutlum=newLinearLayout(context);
-
lum.setOrientation(LinearLayout.HORIZONTAL);
-
lum.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
-
-
mLum.setGravity(Gravity.CENTER);
-
lum.addView(mLum,txtLayoutparams);
-
lum.addView(mLumBar,seekLayoutparams);
-
-
mParent=newLinearLayout(context);
-
mParent.setOrientation(LinearLayout.VERTICAL);
-
mParent.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
-
mParent.addView(saturation);
-
mParent.addView(hue);
-
mParent.addView(lum);
-
}
-
-
publicViewgetParentView(){
-
returnmParent;
-
}
-
-
-
-
-
-
publicvoidsetSaturation(intsaturation){
-
mSaturationValue=saturation*1.0F/MIDDLE_VALUE;
-
}
-
-
-
-
-
-
publicvoidsetHue(inthue){
-
mHueValue=hue*1.0F/MIDDLE_VALUE;
-
}
-
-
-
-
-
-
publicvoidsetLum(intlum){
-
mLumValue=(lum-MIDDLE_VALUE)*1.0F/MIDDLE_VALUE*180;
-
}
-
-
publicArrayList<SeekBar>getSeekBars()
-
{
-
returnmSeekBars;
-
}
-
-
-
-
-
-
-
publicBitmaphandleImage(Bitmapbm,intflag){
-
Bitmapbmp=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),
-
Bitmap.Config.ARGB_8888);
-
-
Canvascanvas=newCanvas(bmp);
-
Paintpaint=newPaint();
-
paint.setAntiAlias(true);
-
if(null==mAllMatrix){
-
mAllMatrix=newColorMatrix();
-
}
-
-
if(null==mLightnessMatrix){
-
mLightnessMatrix=newColorMatrix();
-
}
-
-
if(null==mSaturationMatrix){
-
mSaturationMatrix=newColorMatrix();
-
}
-
-
if(null==mHueMatrix){
-
mHueMatrix=newColorMatrix();
-
}
-
-
switch(flag){
-
caseFLAG_HUE:
-
mHueMatrix.reset();
-
mHueMatrix.setScale(mHueValue,mHueValue,mHueValue,1);
-
-
-
break;
-
caseFLAG_SATURATION:
-
-
-
mSaturationMatrix.reset();
-
mSaturationMatrix.setSaturation(mSaturationValue);
-
break;
-
caseFLAG_LUM:
-
-
mLightnessMatrix.reset();
-
mLightnessMatrix.setRotate(0,mLumValue);
-
mLightnessMatrix.setRotate(1,mLumValue);
-
mLightnessMatrix.setRotate(2,mLumValue);
-
-
break;
-
}
-
mAllMatrix.reset();
-
mAllMatrix.postConcat(mHueMatrix);
-
mAllMatrix.postConcat(mSaturationMatrix);
-
mAllMatrix.postConcat(mLightnessMatrix);
-
-
paint.setColorFilter(newColorMatrixColorFilter(mAllMatrix));
-
canvas.drawBitmap(bm,0,0,paint);
-
-
returnbmp;
-
}
-
-
}
二、主界面:
-
packagecom.jacp.tone;
-
-
importjava.util.ArrayList;
-
-
importandroid.app.Activity;
-
importandroid.graphics.Bitmap;
-
importandroid.graphics.BitmapFactory;
-
importandroid.os.Bundle;
-
importandroid.widget.ImageView;
-
importandroid.widget.LinearLayout;
-
importandroid.widget.SeekBar;
-
importandroid.widget.SeekBar.OnSeekBarChangeListener;
-
-
importcom.jacp.tone.view.ToneLayer;
-
-
-
-
-
-
-
publicclassImageToneActivityextendsActivityimplementsOnSeekBarChangeListener{
-
privateToneLayermToneLayer;
-
privateImageViewmImageView;
-
privateBitmapmBitmap;
-
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
-
init();
-
}
-
-
privatevoidinit()
-
{
-
mToneLayer=newToneLayer(this);
-
-
mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test);
-
mImageView=(ImageView)findViewById(R.id.img_view);
-
mImageView.setImageBitmap(mBitmap);
-
((LinearLayout)findViewById(R.id.tone_view)).addView(mToneLayer.getParentView());
-
-
ArrayList<SeekBar>seekBars=mToneLayer.getSeekBars();
-
for(inti=0,size=seekBars.size();i<size;i++)
-
{
-
seekBars.get(i).setOnSeekBarChangeListener(this);
-
}
-
}
-
-
@Override
-
publicvoidonProgressChanged(SeekBarseekBar,intprogress,
-
booleanfromUser){
-
intflag=(Integer)seekBar.getTag();
-
switch(flag)
-
{
-
caseToneLayer.FLAG_SATURATION:
-
mToneLayer.setSaturation(progress);
-
break;
-
caseToneLayer.FLAG_LUM:
-
mToneLayer.setLum(progress);
-
break;
-
caseToneLayer.FLAG_HUE:
-
mToneLayer.setHue(progress);
-
break;
-
}
-
-
mImageView.setImageBitmap(mToneLayer.handleImage(mBitmap,flag));
-
}
-
-
@Override
-
publicvoidonStartTrackingTouch(SeekBarseekBar){
-
-
}
-
-
@Override
-
publicvoidonStopTrackingTouch(SeekBarseekBar){
-
-
}
-
}
三、布局文件:
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<ScrollViewxmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
>
-
-
<LinearLayout
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:orientation="vertical">
-
-
<ImageView
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:layout_weight="1"
-
android:id="@+id/img_view"
-
android:layout_gravity="center"
-
/>
-
<LinearLayout
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:id="@+id/tone_view"
-
/>
-
</LinearLayout>
-
</ScrollView>
分享到:
相关推荐
3. android 图像处理系列之三--图片色调饱和度、色相、亮度处理.....................................................................6 4. android 图像处理系列之四--给图片添加边框(上)..................
由于一个项目需要,调节图片的亮度,开始使用遍历图片每一个像素,并修改图像的RGB值,发现修改后无法恢复到原来图像。在网上查了一些资料,发现了强大的MagickImage,给大家分享一下,希望对大家有所帮助。
色调、饱和度渐变排列图像与图像增强
图片的一些处理效果,亮度、对比度、饱和度的调整,具有光照效果、底片效果、图片锐化、浮雕效果、怀旧效果、添加边框等功能。
Qt+OpenGL 实现色温、色调、亮度、对比度、饱和度、高光Qt+OpenGL 实现色温、色调、亮度、对比度、饱和度、高光Qt+OpenGL 实现色温、色调、亮度、对比度、饱和度、高光Qt+OpenGL 实现色温、色调、亮度、对比度、饱和...
"图片缩放", "图片圆角", "图片倒影", "旋转图片", "图片反转", "图片色调饱和度、色相、亮度处理", "涂鸦,水印", "图片上写文字", "怀旧效果","模糊效果" ,"柔化效果(高斯模糊)", "浮雕效果", "锐化效果", "底片...
本程序利用OpenCV生成图像的色调-饱和度二维直方图,有兴趣的下载看看。
Android图片效果: "图片缩放", "图片圆角", "图片倒影", "旋转图片", "图片反转", "图片色调饱和度、色相、亮度处理", "涂鸦,水印", "图片上写文字", "怀旧效果", "模糊效果" ,"柔化效果(高斯模糊)", "浮雕效果...
图像处理,需先确定圆形区域,后对圆形区域处理,根据角度将其进行颜色区域划分,颜色变 化同矩形图方法
亮度代表了图像的明暗程度,颜色代表了图像的色度,它包含了色调和饱和度。这个代码可以自动对这三个参数进行调整。
各种基本图像处理操作: 矩形选择、移动图层、套索工具、魔术棒、放大镜...灰化、负片、单色调、海报效果、亮度调整、色彩平衡、曝光处理、Gamma校正、亮度-对比度、色调-饱和度... 需要源代码的,请下载我的更新版本。
单色(灰度)低分辨率图像通过假...然后将该RGB图像转换为色调、饱和度和值(HSV)图像。值分量被更高分辨率的图像替换,得到的HSV图像被转换回RGB。这种RGB合并图像转换为灰度级,是一种空间分辨率提高的合并图像。
HSL滤波器(线性校正,亮度,对比度,饱和度,色调修正).zip HSL滤波器 亮度对比度饱和度 色调修正 代码实例 图像处理
各种基本图像处理操作: 矩形选择、移动图层、套索工具、魔术棒、放大镜...灰化、负片、单色调、海报效果、亮度调整、色彩平衡、曝光处理、Gamma校正、亮度-对比度、色调-饱和度... 需要源代码的,请下载我的更新版本。
将图像亮度、饱和度和色调分开,图像融合只在亮度通道上进行,图像的色调和饱和度保持不变
灰化、负片、单色调、海报效果、亮度调整、色彩平衡、曝光处理、Gamma校正、亮度-对比度、色调-饱和度... 图像渲染特效处理: 纹理、幻想、玻璃格、闪光、超新星、镜头扭曲、玻璃瓦片、应用透镜、立体派、图像瓷砖、...
matlab图像亮度,对比度,饱和度,色阶,色调调整
《Photoshop-CC图像处理》第四章-图像色调调整PPT课件.ppt
matlab开发-图像半色调。该程序将灰度图像转换成半色调图像。