Android 如何实现搜索栏以改变对比度
我正在尝试实现一个搜索栏来改变android中图像的对比度。有人帮我实现这个吗?还有其他的图像处理选项吗? 有人知道解决办法吗?请帮帮我 提前谢谢 代码:Android 如何实现搜索栏以改变对比度,android,imageview,android-imageview,android-seekbar,Android,Imageview,Android Imageview,Android Seekbar,我正在尝试实现一个搜索栏来改变android中图像的对比度。有人帮我实现这个吗?还有其他的图像处理选项吗? 有人知道解决办法吗?请帮帮我 提前谢谢 代码: public class MainActivity extends ActionBarActivity { ImageView imViewAndroid; private SeekBar seekbar; @Override protected void onCreate(Bundle savedIn
public class MainActivity extends ActionBarActivity {
ImageView imViewAndroid;
private SeekBar seekbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekbar = (SeekBar) findViewById(R.id.seekbar);
imViewAndroid = (ImageView) findViewById(R.id.imViewAndroid);
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
imViewAndroid.setImageBitmap(takeContrast(BitmapFactory.decodeResource(getResources(), R.drawable.dicom), 100));
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
public Bitmap takeContrast(Bitmap src, double value) {
// src image size
int width = src.getWidth();
int height = src.getHeight();
// create output bitmap with original size
Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
// color information
int A, R, G, B;
int pixel;
// get contrast value
double contrast = Math.pow((100 + value) / 100, 2);
// 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);
// apply filter contrast for every channel R, G, B
R = Color.red(pixel);
R = (int)(((((R / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
if(R < 0) { R = 0; }
else if(R > 255) { R = 255; }
G = Color.red(pixel);
G = (int)(((((G / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
if(G < 0) { G = 0; }
else if(G > 255) { G = 255; }
B = Color.red(pixel);
B = (int)(((((B / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
if(B < 0) { B = 0; }
else if(B > 255) { B = 255; }
// set new pixel color to output bitmap
bmOut.setPixel(x, y, Color.argb(A, R, G, B));
}
}
// return final image
return bmOut;
}
公共类MainActivity扩展了ActionBarActivity{
ImageView-imViewAndroid;
私人SeekBar SeekBar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekbar=(seekbar)findViewById(R.id.seekbar);
imviewsandroid=(ImageView)findviewbyd(R.id.imviewsandroid);
seekbar.setOnSeekbarchaneListener(新的seekbar.onSeekbarchaneListener(){
@凌驾
public void onProgressChanged(SeekBar SeekBar、int i、boolean b){
}
@凌驾
开始跟踪触摸时的公共无效(SeekBar SeekBar){
setImageBitmap(takeContrast(BitmapFactory.decodeResource(getResources(),R.drawable.dicom),100);
}
@凌驾
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
}
});
}
公共位图对比度(位图src,双值){
//src图像大小
int width=src.getWidth();
int height=src.getHeight();
//使用原始大小创建输出位图
Bitmap bmOut=Bitmap.createBitmap(宽度、高度,src.getConfig());
//颜色信息
int A,R,G,B;
整数像素;
//获取对比度值
双对比度=数学功率((100+值)/100,2);
//扫描所有像素
对于(int x=0;x255){R=255;}
G=颜色。红色(像素);
G=(int)((G/255.0)-0.5)*对比度+0.5)*255.0);
如果(G<0){G=0;}
如果(G>255){G=255;}
B=颜色。红色(像素);
B=(int)((B/255.0)-0.5)*对比度+0.5)*255.0);
如果(B<0){B=0;}
如果(B>255){B=255;}
//设置新像素颜色以输出位图
设置像素(x,y,Color.argb(A,R,G,B));
}
}
//返回最终图像
返回bmOut;
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
// call the method here, default progress is <0, 100>
}
@覆盖
public void onProgressChanged(SeekBar-SeekBar、int-progress、布尔b){
//在此处调用该方法,默认进度为
}
查看my上的完整实现。上面的代码处理图像花费的时间太多。如果使用my代码,则处理图像所花费的时间会非常少
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
contrastAndBrightnessControler(bitmap,seekbar.getProgress()/10,0.7)
}
public static Bitmap contrastAndBrightnessControler(Bitmap bitmap, float contrast, float brightness)
{
ColorMatrix cmatrix = new ColorMatrix(new float[]
{
contrast, 0, 0, 0, brightness,
0, contrast, 0, 0, brightness,
0, 0, contrast, 0, brightness,
0, 0, 0, 1, 0
});
Bitmap ret =Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), bitmap.getConfig());
Canvas canvas = new Canvas(ret);
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cmatrix));
canvas.drawBitmap(bitmap, 0, 0, paint);
return ret;
}
我可以这样调用imViewAndroid.setImageBitmap(ChangeBitMapContractBrightness(0,100));如果有任何错误,请更正我:
ChangeBitMapContractBrightness(位图,(浮点)进度/100f,0.5f)
是否正确?位图变为红色imViewAndroid.setImageBitmap(ChangeBitContractMapBrightness(位图,(浮点)i/100f,0.5f));添加了完整项目的链接,但在实施seekbar时存在一些疑问