歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android改變圖像的飽和度、亮度和對比度

Android改變圖像的飽和度、亮度和對比度

日期:2017/3/1 10:29:55   编辑:Linux編程

使用到了ColorMatrix。

Java代碼:

  1. package com.figo.imgedit;
  2. import java.io.FileNotFoundException;
  3. import Android.app.Activity;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Bitmap.Config;
  6. import android.graphics.BitmapFactory;
  7. import android.graphics.Canvas;
  8. import android.graphics.ColorMatrix;
  9. import android.graphics.ColorMatrixColorFilter;
  10. import android.graphics.Paint;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.util.Log;
  14. import android.widget.ImageView;
  15. import android.widget.SeekBar;
  16. import android.widget.SeekBar.OnSeekBarChangeListener;
  17. public class ImgeditActivity extends Activity {
  18. /** Called when the activity is first created. */
  19. private Bitmap srcBitmap, dstBitmap;
  20. private String pathName = "/sdcard/testimg.jpg";
  21. private ImageView dstimage = null;
  22. private SeekBar SaturationseekBar = null;
  23. private SeekBar BrightnessseekBar = null;
  24. private SeekBar ContrastseekBar = null;
  25. private int imgHeight, imgWidth;
  26. public static final int PICTURE = 0;
  27. public static final int MAX_WIDTH = 240;
  28. public static final int MAX_HEIGHT = 240;
  29. private Uri imageUri;
  30. @Override
  31. public void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.main);
  34. dstimage = (ImageView) findViewById(R.id.dstImageView);
  35. SaturationseekBar = (SeekBar) findViewById(R.id.Saturationseekbar);
  36. BrightnessseekBar = (SeekBar) findViewById(R.id.Brightnessseekbar);
  37. ContrastseekBar = (SeekBar) findViewById(R.id.Contrastseekbar);
  38. srcBitmap = BitmapFactory.decodeFile(pathName);
  39. dstimage.setImageBitmap(srcBitmap);
  40. imgHeight = srcBitmap.getHeight();
  41. imgWidth = srcBitmap.getWidth();
  42. dstBitmap = Bitmap.createBitmap(imgWidth, imgHeight, Config.ARGB_8888);
  43. SaturationseekBar
  44. .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
  45. // 當拖動條的滑塊位置發生改變時觸發該方法
  46. public void onProgressChanged(SeekBar arg0, int progress,
  47. boolean fromUser) {
  48. // 創建一個相同尺寸的可變的位圖區,用於繪制調色後的圖片
  49. Bitmap bmp = Bitmap.createBitmap(imgWidth, imgHeight,
  50. Config.ARGB_8888);
  51. ColorMatrix cMatrix = new ColorMatrix();
  52. // 設置飽和度
  53. cMatrix.setSaturation((float) (progress / 100.0));
  54. Paint paint = new Paint();
  55. paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
  56. Canvas canvas = new Canvas(bmp);
  57. // 在Canvas上繪制一個已經存在的Bitmap。這樣,dstBitmap就和srcBitmap一摸一樣了
  58. canvas.drawBitmap(srcBitmap, 0, 0, paint);
  59. dstimage.setImageBitmap(bmp);
  60. }
  61. public void onStartTrackingTouch(SeekBar bar) {
  62. }
  63. public void onStopTrackingTouch(SeekBar bar) {
  64. }
  65. });
  66. BrightnessseekBar
  67. .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
  68. // 當拖動條的滑塊位置發生改變時觸發該方法
  69. public void onProgressChanged(SeekBar arg0, int progress,
  70. boolean fromUser) {
  71. Bitmap bmp = Bitmap.createBitmap(imgWidth, imgHeight,
  72. Config.ARGB_8888);
  73. int brightness = progress - 127;
  74. ColorMatrix cMatrix = new ColorMatrix();
  75. cMatrix.set(new float[] { 1, 0, 0, 0, brightness, 0, 1,
  76. 0, 0, brightness,// 改變亮度
  77. 0, 0, 1, 0, brightness, 0, 0, 0, 1, 0 });
  78. Paint paint = new Paint();
  79. paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
  80. Canvas canvas = new Canvas(bmp);
  81. // 在Canvas上繪制一個已經存在的Bitmap。這樣,dstBitmap就和srcBitmap一摸一樣了
  82. canvas.drawBitmap(srcBitmap, 0, 0, paint);
  83. dstimage.setImageBitmap(bmp);
  84. }
  85. public void onStartTrackingTouch(SeekBar bar) {
  86. }
  87. public void onStopTrackingTouch(SeekBar bar) {
  88. }
  89. });
  90. ContrastseekBar
  91. .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
  92. // 當拖動條的滑塊位置發生改變時觸發該方法
  93. public void onProgressChanged(SeekBar arg0, int progress,
  94. boolean fromUser) {
  95. Bitmap bmp = Bitmap.createBitmap(imgWidth, imgHeight,
  96. Config.ARGB_8888);
  97. // int brightness = progress - 127;
  98. float contrast = (float) ((progress + 64) / 128.0);
  99. ColorMatrix cMatrix = new ColorMatrix();
  100. cMatrix.set(new float[] { contrast, 0, 0, 0, 0, 0,
  101. contrast, 0, 0, 0,// 改變對比度
  102. 0, 0, contrast, 0, 0, 0, 0, 0, 1, 0 });
  103. Paint paint = new Paint();
  104. paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
  105. Canvas canvas = new Canvas(bmp);
  106. // 在Canvas上繪制一個已經存在的Bitmap。這樣,dstBitmap就和srcBitmap一摸一樣了
  107. canvas.drawBitmap(srcBitmap, 0, 0, paint);
  108. dstimage.setImageBitmap(bmp);
  109. }
  110. public void onStartTrackingTouch(SeekBar arg0) {
  111. // TODO Auto-generated method stub
  112. }
  113. public void onStopTrackingTouch(SeekBar seekBar) {
  114. // TODO Auto-generated method stub
  115. }
  116. });
  117. }
  118. /**
  119. * 需要加載的圖片可能是大圖,我們需要對其進行合適的縮小處理
  120. *
  121. * @param imageUri
  122. */
  123. private Bitmap getSrcImage(Uri imageUri) {
  124. try {
  125. BitmapFactory.Options ops = new BitmapFactory.Options();
  126. ops.inJustDecodeBounds = true;
  127. Bitmap bmp = BitmapFactory.decodeStream(this.getContentResolver()
  128. .openInputStream(imageUri), null, ops);
  129. int wRatio = (int) Math.ceil(ops.outWidth / (float) MAX_WIDTH);
  130. int hRatio = (int) Math.ceil(ops.outHeight / (float) MAX_HEIGHT);
  131. if (wRatio > 1 && hRatio > 1) {
  132. if (wRatio > hRatio) {
  133. ops.inSampleSize = wRatio;
  134. } else {
  135. ops.inSampleSize = hRatio;
  136. }
  137. }
  138. ops.inJustDecodeBounds = false;
  139. bmp = BitmapFactory.decodeStream(this.getContentResolver()
  140. .openInputStream(imageUri), null, ops);
  141. return bmp;
  142. } catch (FileNotFoundException e) {
  143. // TODO Auto-generated catch block
  144. e.printStackTrace();
  145. Log.e(this.getClass().getName(), e.getMessage());
  146. }
  147. return null;
  148. }
  149. }
Copyright © Linux教程網 All Rights Reserved