Java Android方法执行时间长?
我正在创建一个非常简单的应用程序,它可以在按下时将图片颜色更改为深褐色滤镜。当我运行应用程序时,一切都正常,但图像改变需要将近一分钟的时间。你能看一下我的代码,看看能不能告诉我为什么Java Android方法执行时间长?,java,android,image,filtering,Java,Android,Image,Filtering,我正在创建一个非常简单的应用程序,它可以在按下时将图片颜色更改为深褐色滤镜。当我运行应用程序时,一切都正常,但图像改变需要将近一分钟的时间。你能看一下我的代码,看看能不能告诉我为什么 public class Pictue extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta
public class Pictue extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pictue);
ImageButton button = (ImageButton) findViewById(R.id.imageButton1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bitmap b1 = BitmapFactory.decodeResource(getResources(), R.drawable.chin);
b1 = createSepiaToningEffect(b1,10,7.00,6.00,3.00);
ImageView chin = (ImageView) findViewById(R.id.imageView1) ;
chin.setImageBitmap(b1);
}
});
}
public static Bitmap createSepiaToningEffect(Bitmap src, int depth, double red, double green, double blue) {
int width = src.getWidth();
int height = src.getHeight();
Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
final double GS_RED = 0.3;
final double GS_GREEN = 0.59;
final double GS_BLUE = 0.11;
int A, R, G, B;
int pixel;
for(int x = 0; x < width; ++x) {
for(int y = 0; y < height; ++y) {
pixel = src.getPixel(x, y);
A = Color.alpha(pixel);
R = Color.red(pixel);
G = Color.green(pixel);
B = Color.blue(pixel);
B = G = R = (int)(GS_RED * R + GS_GREEN * G + GS_BLUE * B);
// apply intensity level for sepid-toning on each channel
R += (depth * red);
if(R > 255) { R = 255; }
G += (depth * green);
if(G > 255) { G = 255; }
B += (depth * blue);
if(B > 255) { B = 255; }
bmOut.setPixel(x, y, Color.argb(A, R, G, B));
}
}
return bmOut;
}
}
公共类图片扩展了ActionBarActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pictue);
ImageButton按钮=(ImageButton)findViewById(R.id.imageButton1);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
位图b1=BitmapFactory.decodeResource(getResources(),R.drawable.chin);
b1=createSepiaToningEffect(b1,10,7.00,6.00,3.00);
ImageView chin=(ImageView)findViewById(R.id.imageView1);
chin.setImageBitmap(b1);
}
});
}
公共静态位图createSepiaToningEffect(位图src、int-depth、双红、双绿、双蓝){
int width=src.getWidth();
int height=src.getHeight();
Bitmap bmOut=Bitmap.createBitmap(宽度、高度,src.getConfig());
最终双GS_红=0.3;
最终双GS_绿色=0.59;
最终双GS_蓝=0.11;
int A,R,G,B;
整数像素;
对于(int x=0;x255){R=255;}
G+=(深度*绿色);
如果(G>255){G=255;}
B+=(深度*蓝色);
如果(B>255){B=255;}
设置像素(x,y,Color.argb(A,R,G,B));
}
}
返回bmOut;
}
}
我建议使用
正如这里所建议的那样