2012-07-26 1 views

답변

7

체크 Increase/Decrease Brightness of Image

에 주어진 예를 조정해야 할 바를 추구하고자

int brightness; 
SeekBar seekbarbrightness=(SeekBar)findViewById(R.id.seekBar1); 
seekbarbrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) { 

      // TODO Auto-generated method stub 

      brightness=progress; 
      Bitmap bitmap=doBrightness(originalbitmap,brightness); 
      imageView.setImageBitmap(bitmap); 
     } 
     }); 
+0

타이,하지만 공공 공극 "방법 유형 새로운 OnSeekBarChangeListener의 onStopTrackingTouch (SeekBar를가)() {} 슈퍼 클래스 메소드를 오버라이드 (override) 할 필요"내가 할 수있는 날이 오류를 제공 "@override"를 제거하여 문제를 해결하십시오. –

+0

어떤 오류가 발생합니까? – Khan

+0

새로운 SeekBar.OnSeekBarChangeListener() {}의 메소드 onProgressChanged (SeekBar, int, boolean)가 수퍼 클래스 메서드를 오버라이드해야합니다. –

1

체크 증가/감소 밝기에 주어진 예 변경 이미지

 int brightness; 
SeekBar seekBarBrightness=(SeekBar)findViewById(R.id.seekBar1); 
seekBarBrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

    @Override 
    public void onStopTrackingTouch(SeekBar arg0) { 


    } 

    @Override 
    public void onStartTrackingTouch(SeekBar arg0) { 


    } 

    @Override 
    public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) { 

     Bitmap newBitMap = doBrightness(bitMap,progress); 

     imageView.setImageBitmap(newBitMap); 

    } 
    }); 




    public static Bitmap doBrightness(Bitmap src, int value) 
    { 
     // image size 
     int width = src.getWidth(); 
     int height = src.getHeight(); 
     // create output bitmap 
     Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig()); 
     // color information 
     int A, R, G, B; 
     int pixel; 

     // scan through all pixels 
     for (int x = 0; x < width; ++x) 
      { 
       for (int y = 0; y < height; ++y) 
        { 
         // get pixel color 
         pixel = src.getPixel(x, y); 
         A = Color.alpha(pixel); 
         R = Color.red(pixel); 
         G = Color.green(pixel); 
         B = Color.blue(pixel); 

         // increase/decrease each channel 
         R += value; 
         if (R > 255) 
          { 
           R = 255; 
          } else if (R < 0) 
          { 
           R = 0; 
          } 

         G += value; 
         if (G > 255) 
          { 
           G = 255; 
          } else if (G < 0) 
          { 
           G = 0; 
          } 

         B += value; 
         if (B > 255) 
          { 
           B = 255; 
          } else if (B < 0) 
          { 
           B = 0; 
          } 

         // apply new pixel color to output bitmap 
         bmOut.setPixel(x, y, Color.argb(A, R, G, B)); 
        } 
      } 

     // return final image 
     return bmOut; 
    } 
+0

이 algotithm은 전혀 최적화되지 않았습니다. 새 전화기의 사진은 10MB가 넘을 수 있고 실시간으로 변경 사항을 볼 수 없습니다. –

+0

잘 작동합니다. 변경을 수행하는 데 너무 오래 걸립니다. – user123

1

사용이 예제의

SeekBar sb_value = (SeekBar) findViewById(R.id.sb_value); 
     final ImageView im_brightness = (ImageView) findViewById(R.id.im_brightness); 
     sb_value.setProgress(125); 
     sb_value.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 

       im_brightness.setColorFilter(setBrightness(progress)); 

      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 

      } 
     }); 

setBrightness 방법 :

public static PorterDuffColorFilter setBrightness(int progress) { 
     if (progress >= 100) 
     { 
      int value = (int) (progress-100) * 255/100; 

      return new PorterDuffColorFilter(Color.argb(value, 255, 255, 255), PorterDuff.Mode.SRC_OVER); 

     } 
     else 
     { 
      int value = (int) (100-progress) * 255/100; 
      return new PorterDuffColorFilter(Color.argb(value, 0, 0, 0), PorterDuff.Mode.SRC_ATOP); 


     } 
    }