0

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

主要代码:

@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();
        }
    });
}

}

变量 frame00, frame01, frame02 是我设置为按钮的 ImageView。当用户点击帧图像时,它会从drawable加载一个图像并存储在一个名为“frame”的变量中,并调用一个名为“backtask”的异步任务。

这是“backtask”代码

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()”代码时,我曾经使用这个 backtask 代码来进行加载。这是我的“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 是一个变量,当“temp = setFrame(oribmp);”时,它包含从类temporary.getBitmap() 获取的原始位图。完成后,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 activity 这是FrameActivity第一次启动时的样子,原来的位图就是那个壁虎这是FrameActivity第一次启动时的样子,原来的位图就是那个gecko

set frame 1 这是设置第一帧时的样子这是设置第一帧时的样子

set frame 2 这是设置第二帧时的样子,因为 oribmp 与第一个 seFrame 的结果具有相同的值,在第二个 setFrame 上它们看起来像堆积 这是设置第二帧时的样子,因为 oribmp 的值与第一个 seFrame 的结果相同,在第二个 setFrame 上它们看起来像堆积

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

4

0 回答 0