2012-09-14 92 views
1

我有一個hue效果代碼,我想用它與一個seek bar,效果可以應用使用applyHueFilter(bitmap, level)我想當我移動的搜索欄的圓圈右側的色相過濾器增加並且當我在progressChanged使用該applyHueFilter ..它移動到左側的色相濾波器減小(去除)..使用色調圖像效果與seekbar

public static Bitmap applyHueFilter(Bitmap source, int level) { 
    // get image size 
    int width = source.getWidth(); 
    int height = source.getHeight(); 
    int[] pixels = new int[width * height]; 
    float[] HSV = new float[3]; 
    // get pixel array from source 
    source.getPixels(pixels, 0, width, 0, 0, width, height); 

    int index = 0; 
    // iteration through pixels 
    for(int y = 0; y < height; ++y) { 
     for(int x = 0; x < width; ++x) { 
      // get current index in 2D-matrix 
      index = y * width + x; 
      // convert to HSV 
      Color.colorToHSV(pixels[index], HSV); 
      // increase Saturation level 
      HSV[1] *= level; 
      HSV[1] = (float) Math.max(0.0, Math.min(HSV[1], 1.0)); 
      // take color back 
      pixels[index] |= Color.HSVToColor(HSV); 
     } 
    } 
    // output bitmap     
    myBitmap.setPixels(pixels, 0, width, 0, 0, width, height); 
    return myBitmap;   
} 

在時刻林

hueSB.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      applyHueFilter(myBitmap, 100); 
     } 

     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 

    }); 

發生的事情是當我移動seekbar右邊的色調適用,但當我把它移到左邊它不會被刪除(減少)..

+0

1小時沒有答案:(,順便說一句,誰沒有明白..我想要的是當我使用seekbar(向右移動)位圖的色調增加,當我把拇指向左移動色調減少.. atm當我移動到左邊和右邊它增加,它必須在左邊減少並且只在右邊增加 –

回答

0

簡單的邏輯錯誤。你有applyHueFilter(myBitmap, 100); ......你無論如何都增加100。

它應該是:

applyHueFilter(myBitmap, progress); 

望着applyHueFilter方法,你也總是在做HSV[0] *= level;,所以無論什麼時候,你總是增加色調,只是或大或小的數額。

+0

如果你使用HSV [1]/= level;沒什麼變化 –

+0

不應該是'HSV [0 ]'?無論如何,我的道歉,這是一種猜測,我不應該在未知的情況下發布它,我會從我的答案中刪除它,我對顏色效果以及如何使用它們一無所知。 ...只要將它設置爲與此類似的水平[HSV [0] =水平],怎麼樣? – Barak

+0

HSV [0] =水平; \t \t \t \t \t HSV [0] =(float)Math.max(0.0,Math.min(HSV [1],1.0)); ..我這樣做,仍然沒有改變 –

4
Canvas canvas = new Canvas(yourbitmap); 

     Paint paint = new Paint(); 
     paint.setColorFilter(ColorFilterGenerator.adjustHue(seekbarvalue)); 
     canvas.drawBitmap(yourbitmap, 0, 0, paint); 
return yourbitmap; 


public class ColorFilterGenerator 
{ 

    public static ColorFilter adjustHue(float value) 
    { 
     ColorMatrix cm = new ColorMatrix(); 

     adjustHue(cm, value); 

     return new ColorMatrixColorFilter(cm); 
    } 


    public static void adjustHue(ColorMatrix cm, float value) 
    { 

     value = (value % 360.0f) * (float) Math.PI/180.0f; 

     if (value == 0) 
     { 
      return; 
     } 
     float cosVal = (float) Math.cos(value); 
     float sinVal = (float) Math.sin(value); 
     float lumR = 0.213f; 
     float lumG = 0.715f; 
     float lumB = 0.072f; 
     float[] mat = new float[] 
       { 
         lumR + cosVal * (1 - lumR) + sinVal * (-lumR), lumG + cosVal * (-lumG) + sinVal * (-lumG), lumB + cosVal * (-lumB) + sinVal * (1 - lumB), 0, 0, 
         lumR + cosVal * (-lumR) + sinVal * (0.143f), lumG + cosVal * (1 - lumG) + sinVal * (0.140f), lumB + cosVal * (-lumB) + sinVal * (-0.283f), 0, 0, 
         lumR + cosVal * (-lumR) + sinVal * (-(1 - lumR)), lumG + cosVal * (-lumG) + sinVal * (lumG), lumB + cosVal * (1 - lumB) + sinVal * (lumB), 0, 0, 
         0f, 0f, 0f, 1f, 0f, 
         0f, 0f, 0f, 0f, 1f }; 
     cm.postConcat(new ColorMatrix(mat)); 
    } 
} 

此代碼可以有效地用於使用顏色過濾器的色調效果。