La meilleure façon serait le même que celui de commutation tout type de données:
- créer un bitmap temporaire pour contenir les données de zone 1 et y mettre les données.
- placez les données de zone2 dans la zone1.
- placez les données de phototrame temporaires dans area2 et recyclez le bitmap temporaire.
Voici un exemple de code que j'ai écrit. Ce n'est pas testé, mais devrait fonctionner:
Bitmap origin=...;
Rect r1=...,r2=... ; //assumption: both rectangles are of the same size
//copy from region1 to temp bitmap
Bitmap temp= Bitmap.createBitmap(origin,r1.left,r1.top,r1.width(),r1.height());
//copy from region2 into region1
Canvas canvas=new Canvas(origin);
canvas.drawBitmap(origin, r2, r1, new Paint());
//copy from temp bitmap to region2
canvas.drawBitmap(temp, new Rect(0,0,r2.width(),r2.height()), r2, paint);
temp.recycle();
Une autre façon (ce qui pourrait être mieux en termes de vitesse et/ou de la mémoire) serait d'utiliser le tableau int à la place d'un nouvel objet bitmap, mais je pense que cette méthode est facile à comprendre.
est ici l'alternative:
Bitmap origin=...;
Rect r1=...,r2=... ; //assumption: both rectangles are of the same size
//copy from region1 to temp pixels
int[] pixels=new int[r1.width()*r1.height()];
origin.getPixels (pixels, 0, origin.getWidth(), r1.left, r1.top, r1.width(), r1.height());
//copy from region2 into region1
Canvas canvas=new Canvas(origin);
canvas.drawBitmap(origin, r2, r1, new Paint());
//copy from temp pixels to region2
origin.setPixels (pixels, 0, origin.getWidth(), r2.left, r2.top, r2.width(), r2.height());
J'espère que je ne l'ai pas fait d'erreur ici, puisque je ne l'ai pas testé.