mixer-a
BlogJava
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
posts - 101, comments - 29, trackbacks - 0
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
給我留言
查看公開留言
查看私人留言
隨筆檔案
(101)
2012年8月 (2)
2012年7月 (13)
2012年6月 (6)
2012年5月 (6)
2012年4月 (26)
2012年3月 (16)
2012年2月 (17)
2012年1月 (15)
我的連接
a
iteye
csdn
www.javady.com
www.javady.com
搜索
最新評論
1.?re: android開發我的新浪微博客戶端-登錄頁面UI篇(4.1)[未登錄]
仿真時提示:No Launcher activity found!
--小龍
2.?re: android開發我的新浪微博客戶端-登錄頁面UI篇(4.1)[未登錄]
“新建名LoginActivity.java的Activity并且在AndroidManifest.xml中進行相應配置”請問怎么進行配置?因為新建的LoginActivity.java無法啟動仿真。
--小龍
3.?re: JS 時間處理和格式轉換
@Wanlic2008
不用把時間的年份拿出來單獨分析
--Wanlic2008
4.?re: JS 時間處理和格式轉換
評論內容較長,點擊標題查看
--Wanlic2008
5.?re: Android進階2之Http連接GET/POST請求
有用
--許大海
閱讀排行榜
1.?JS 時間處理和格式轉換(41184)
2.?Android進階2之Activity之間數據交流(onActivityResult的用法)(11500)
3.?[原]Android應用程序發送廣播(sendBroadcast)的過程分析(7302)
4.?[原]Android應用程序鍵盤(Keyboard)消息處理機制分析(4897)
5.?并行計算框架的Java實現--系列一(3783)
評論排行榜
1.?你想不到的壓縮方法:將javascript文件壓縮成PNG圖像存儲(4)
2.?MyEclipse快捷鍵設置(4)
3.?開發流程那些事:6天時間修改1行代碼(3)
4.?JS 時間處理和格式轉換(3)
5.?也談 GET 和 POST 的區別(2)
android圖像處理系列之三--圖片色調飽和度、色相、亮度處理
原圖:
處理后:
下面貼代碼:
一、圖片處理層:
package com.jacp.tone.view; import java.util.ArrayList; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import com.jacp.tone.R; /** * 圖片調色處理 * @author maylian7700@126.com * */ public class ToneLayer { /** * 飽和度標識 */ public static final int FLAG_SATURATION = 0x0; /** * 亮度標識 */ public static final int FLAG_LUM = 0x1; /** * 色相標識 */ public static final int FLAG_HUE = 0x2; /** * 飽和度 */ private TextView mSaturation; private SeekBar mSaturationBar; /** * 色相 */ private TextView mHue; private SeekBar mHueBar; /** * 亮度 */ private TextView mLum; private SeekBar mLumBar; private float mDensity; private static final int TEXT_WIDTH = 50; private LinearLayout mParent; private ColorMatrix mLightnessMatrix; private ColorMatrix mSaturationMatrix; private ColorMatrix mHueMatrix; private ColorMatrix mAllMatrix; /** * 亮度 */ private float mLumValue = 1F; /** * 飽和度 */ private float mSaturationValue = 0F; /** * 色相 */ private float mHueValue = 0F; /** * SeekBar的中間值 */ private static final int MIDDLE_VALUE = 127; /** * SeekBar的最大值 */ private static final int MAX_VALUE = 255; private ArrayList<SeekBar> mSeekBars = new ArrayList<SeekBar>(); public ToneLayer(Context context) { init(context); } private void init(Context context) { mDensity = context.getResources().getDisplayMetrics().density; mSaturation = new TextView(context); mSaturation.setText(R.string.saturation); mHue = new TextView(context); mHue.setText(R.string.contrast); mLum = new TextView(context); mLum.setText(R.string.lightness); mSaturationBar = new SeekBar(context); mHueBar = new SeekBar(context); mLumBar = new SeekBar(context); mSeekBars.add(mSaturationBar); mSeekBars.add(mHueBar); mSeekBars.add(mLumBar); for (int i = 0, size = mSeekBars.size(); i < size; i++) { SeekBar seekBar = mSeekBars.get(i); seekBar.setMax(MAX_VALUE); seekBar.setProgress(MIDDLE_VALUE); seekBar.setTag(i); } LinearLayout saturation = new LinearLayout(context); saturation.setOrientation(LinearLayout.HORIZONTAL); saturation.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); LinearLayout.LayoutParams txtLayoutparams = new LinearLayout.LayoutParams((int) (TEXT_WIDTH * mDensity), LinearLayout.LayoutParams.MATCH_PARENT); mSaturation.setGravity(Gravity.CENTER); saturation.addView(mSaturation, txtLayoutparams); LinearLayout.LayoutParams seekLayoutparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); saturation.addView(mSaturationBar, seekLayoutparams); LinearLayout hue = new LinearLayout(context); hue.setOrientation(LinearLayout.HORIZONTAL); hue.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); mHue.setGravity(Gravity.CENTER); hue.addView(mHue, txtLayoutparams); hue.addView(mHueBar, seekLayoutparams); LinearLayout lum = new LinearLayout(context); lum.setOrientation(LinearLayout.HORIZONTAL); lum.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); mLum.setGravity(Gravity.CENTER); lum.addView(mLum, txtLayoutparams); lum.addView(mLumBar, seekLayoutparams); mParent = new LinearLayout(context); mParent.setOrientation(LinearLayout.VERTICAL); mParent.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); mParent.addView(saturation); mParent.addView(hue); mParent.addView(lum); } public View getParentView() { return mParent; } /** * 設置飽和度值 * @param saturation */ public void setSaturation(int saturation) { mSaturationValue = saturation * 1.0F / MIDDLE_VALUE; } /** * 設置色相值 * @param hue */ public void setHue(int hue) { mHueValue = hue * 1.0F / MIDDLE_VALUE; } /** * 設置亮度值 * @param lum */ public void setLum(int lum) { mLumValue = (lum - MIDDLE_VALUE) * 1.0F / MIDDLE_VALUE * 180; } public ArrayList<SeekBar> getSeekBars() { return mSeekBars; } /** * * @param flag * 比特位0 表示是否改變色相,比位1表示是否改變飽和度,比特位2表示是否改變明亮度 */ public Bitmap handleImage(Bitmap bm, int flag) { Bitmap bmp = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_8888); // 創建一個相同尺寸的可變的位圖區,用于繪制調色后的圖片 Canvas canvas = new Canvas(bmp); // 得到畫筆對象 Paint paint = new Paint(); // 新建paint paint.setAntiAlias(true); // 設置抗鋸齒,也即是邊緣做平滑處理 if (null == mAllMatrix) { mAllMatrix = new ColorMatrix(); } if (null == mLightnessMatrix) { mLightnessMatrix = new ColorMatrix(); // 用于顏色變換的矩陣,android位圖顏色變化處理主要是靠該對象完成 } if (null == mSaturationMatrix) { mSaturationMatrix = new ColorMatrix(); } if (null == mHueMatrix) { mHueMatrix = new ColorMatrix(); } switch (flag) { case FLAG_HUE: // 需要改變色相 mHueMatrix.reset(); mHueMatrix.setScale(mHueValue, mHueValue, mHueValue, 1); // 紅、綠、藍三分量按相同的比例,最后一個參數1表示透明度不做變化,此函數詳細說明參考 // // android // doc break; case FLAG_SATURATION: // 需要改變飽和度 // saturation 飽和度值,最小可設為0,此時對應的是灰度圖(也就是俗話的“黑白圖”), // 為1表示飽和度不變,設置大于1,就顯示過飽和 mSaturationMatrix.reset(); mSaturationMatrix.setSaturation(mSaturationValue); break; case FLAG_LUM: // 亮度 // hueColor就是色輪旋轉的角度,正值表示順時針旋轉,負值表示逆時針旋轉 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(new ColorMatrixColorFilter(mAllMatrix));// 設置顏色變換效果 canvas.drawBitmap(bm, 0, 0, paint); // 將顏色變化后的圖片輸出到新創建的位圖區 // 返回新的位圖,也即調色處理后的圖片 return bmp; } }
二、主界面:
package com.jacp.tone; import java.util.ArrayList; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import com.jacp.tone.view.ToneLayer; /** * 啟動的主界面 * @author maylian7700@126.com * */ public class ImageToneActivity extends Activity implements OnSeekBarChangeListener { private ToneLayer mToneLayer; private ImageView mImageView; private Bitmap mBitmap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { mToneLayer = new ToneLayer(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 (int i = 0, size = seekBars.size(); i < size; i++) { seekBars.get(i).setOnSeekBarChangeListener(this); } } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int flag = (Integer) seekBar.getTag(); switch (flag) { case ToneLayer.FLAG_SATURATION: mToneLayer.setSaturation(progress); break; case ToneLayer.FLAG_LUM: mToneLayer.setLum(progress); break; case ToneLayer.FLAG_HUE: mToneLayer.setHue(progress); break; } mImageView.setImageBitmap(mToneLayer.handleImage(mBitmap, flag)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }
三、布局文件:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns: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>
posted on 2012-02-17 11:08
mixer-a
閱讀(1010)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright ©2025 mixer-a
主站蜘蛛池模板:
九九久久精品国产免费看小说
|
激情内射亚洲一区二区三区爱妻
|
www一区二区www免费
|
亚洲国产精品成人
|
yellow免费网站
|
国产亚洲精品国产
|
亚在线观看免费视频入口
|
亚洲精品免费在线
|
久久久久久99av无码免费网站
|
少妇太爽了在线观看免费视频
|
国产精品亚洲精品日韩已满
|
日韩精品在线免费观看
|
久久精品蜜芽亚洲国产AV
|
亚洲精品视频免费看
|
亚洲香蕉久久一区二区
|
精品免费国产一区二区三区
|
鲁死你资源站亚洲av
|
亚洲国产成人久久综合一区77
|
中文在线观看永久免费
|
免费看片A级毛片免费看
|
精品亚洲福利一区二区
|
国产亚洲色婷婷久久99精品91
|
久久久久久成人毛片免费看
|
亚洲一区二区三区四区视频
|
日韩一级在线播放免费观看
|
暖暖免费中文在线日本
|
亚洲gv猛男gv无码男同短文
|
四虎国产精品免费久久
|
国产精品亚洲色图
|
99视频在线精品免费观看6
|
亚洲av纯肉无码精品动漫
|
精品亚洲视频在线观看
|
30岁的女人韩剧免费观看
|
亚洲人成网站18禁止
|
亚洲伊人久久综合中文成人网
|
久9久9精品免费观看
|
另类小说亚洲色图
|
91精品国产亚洲爽啪在线观看
|
毛片在线播放免费观看
|
亚洲成Av人片乱码色午夜
|
久久这里只有精品国产免费10
|