我的android设置框架应用程序上的奇怪错误

时间:2013-01-15 07:28:00

标签: android image image-processing bitmap frame

我创建了一个将帧设置为图像位图的应用程序...但是当进程给出结果时,我不知道为什么结果位图也保存到我的原始位图变量,这是我的代码:

主要代码:

@Override
public void onCreate (Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.frame);
    tampilFrame = (ImageView)findViewById(R.id.ivframe);
    oribmp = temporary.getBitmap();
            temp = oribmp;
    tampilFrame.setImageBitmap(temp);
    frame00 = (ImageView)findViewById(R.id.frs00);
    frame00.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr00));
            frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
            new backtask().execute();
        }
    });
    frame01 = (ImageView)findViewById(R.id.frs01);
    frame01.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr01));
            frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
            new backtask().execute();
        }
    });
    frame02 = (ImageView)findViewById(R.id.frs02);
    frame02.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr02));
            frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
            new backtask().execute();
        }
    });
    frame03 = (ImageView)findViewById(R.id.frs03);
    frame03.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            frame = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.fr03));
            frame = Bitmap.createScaledBitmap(frame, 800, 800, false);
            new backtask().execute();
        }
    });
}

}

variabel frame00,frame01,frame02是我设置为Button的ImageView。当用户单击帧图像时,它将从drawable加载图像并存储在名为“frame”的变量中,并调用名为“backtask”的asyncTask。

这是“反铲任务”代码

public class backtask extends AsyncTask<Void, Void, Void> {
    ProgressDialog prog;

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        prog =  ProgressDialog.show(FrameActivity.this, "", "Progress...");     
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        temp = setFrame(oribmp);
        Log.i("temp", "widht : "+String.valueOf(temp.getWidth())+" Height : "+String.valueOf(temp.getHeight()));
        return null;
    }

    @Override
    protected void onPostExecute(Void res){
        super.onPostExecute(res);
        tampilFrame.setImageBitmap(temp);
        prog.dismiss();
        Log.i("setFrame", "Complete");
    }
}

这个后退任务代码我用来在应用程序运行“setFrame()”代码时进行加载。这是我的“setFrame”代码:

public Bitmap setFrame(Bitmap bit){
    for (int i=0;i<frame.getWidth();i++){
        for(int j=0;j<frame.getHeight();j++){
            if (Color.alpha(frame.getPixel(i, j))!=0){
                bit.setPixel(i, j, frame.getPixel(i, j));
            }
        }
    }
    frame.recycle();
    return bit;
}

oribmp是一个包含原始位图的变量,它来自类temporary.getBitmap() 当“temp = setFrame(oribmp);”完成后,ori bmp也和temp一样变化。 当我临时检查类时,临时类中包含原始位图的位图变量也会更改为setFrame的结果...

这是代码pf临时类

public class temporary {
private static Bitmap Mbmp;

public static Bitmap getBitmap () {
    return Mbmp;
}

public static void setBitmap(Bitmap oribimp) {
    // TODO Auto-generated method stub
    Mbmp = oribimp;
    Log.i("editor", "simpen bitmap");
}

}

临时类是我用来将位图值发送到我的应用程序中的另一个活动的类。这就是FrameActivity在运行时的样子..

strart活动 this is the look of FrameActivity when its first start, the original bitmap is that gecko这是第一次启动时FrameActivity的外观,原始位图是gecko

设置第1帧 this is the looks when set the first frame这是设置第一帧时的外观

设置第2帧 this is the looks when set the second frame, cause the oribmp has the same value like the result of the first seFrame, on the second setFrame they looks like pile up 这是设置第二帧时的外观,导致oribmp具有与第一个seFrame的结果相同的值,在第二个setFrame上它们看起来像堆积

如果我的问题太长了,也许任何人都可以给我解决方案:D

0 个答案:

没有答案