많은 코드를 시도하고 안드로이드 개발자를 보았지만 제대로 작동하지 못했습니다. 나는 SeekBar를 진행 아래 그림과 같이 내 비트 맵 이미지의 밝기안드로이드 비트 맵 밝기 조정을위한 검색 바
0
A
답변
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);
}
});
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);
}
}
타이,하지만 공공 공극 "방법 유형 새로운 OnSeekBarChangeListener의 onStopTrackingTouch (SeekBar를가)() {} 슈퍼 클래스 메소드를 오버라이드 (override) 할 필요"내가 할 수있는 날이 오류를 제공 "@override"를 제거하여 문제를 해결하십시오. –
어떤 오류가 발생합니까? – Khan
새로운 SeekBar.OnSeekBarChangeListener() {}의 메소드 onProgressChanged (SeekBar, int, boolean)가 수퍼 클래스 메서드를 오버라이드해야합니다. –