Un problème apparemment simple, j'ai un bitmap hors écran que j'effectue des transformations (rotation, mise à l'échelle, etc) et je voudrais stocker une copie de l'image avant les transformations, de sorte que dans onDraw()
de ma vue, je peux afficher le bitmap hors écran transformé ET une version plus petite mise à l'échelle du bitmap non transformé comme une vignette.Android: Copie d'un bitmap
Aucun problème lors de l'écriture du bitmap hors écran dans onDraw()
, mais le bitmap «préservé» copié est également en cours de transformation. Voici le code où je fais la copie du bitmap, où mCanvas a été créé par mCanvas = new Canvas(mBitmap);
:
mPreservedBitmap = Bitmap.createBitmap(mBitmap);
// save the canvas
mCanvas.save();
// do some rotations, scaling
mCanvas.rotate(rotation, px, py);
mCanvas.scale(scaleFactor, scaleFactor, scaleFocusX, scaleFocusY);
// draw the bitmaps to the screen
invalidate();
// restore the bitmap
mCanvas.restore();
En onDraw()
, j'ai:
// draw the off-screen bitmap to the on-screen bitmap
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
// draw the preserved image, scaling it to a thumbnail first
canvas.drawBitmap(
Bitmap.createScaledBitmap(mPreservedBitmap, (int) thumbWidth, (int) thumbHeight, true),
null,
thumbnailRectF,
thumbCanvasPaint);
La vignette se redimensionnée à la taille appropriée, mais le bitmap qui est réduit à la taille des vignettes est également pivoté et mis à l'échelle exactement comme mBitmap, ce que je ne veux pas. J'ai également essayé la méthode Bitmap.copy(), mais avec les mêmes résultats. N'importe quel pointeur/assitance/conseil?
Merci,
Paul
Y a-t-il autre chose que vous faites avec mCanvas à partir du premier extrait?Il ne semble pas réellement faire quoi que ce soit (la rotation etc. n'affecte que les opérations futures, pas l'image elle-même). Et pourquoi essayez-vous de copier le bitmap dans onDraw? En modifiant la matrice de la toile de manière appropriée, vous devriez être en mesure de mettre à l'échelle la vignette à la volée. –
J'utilise mCanvas à d'autres points du code pour ajouter des formes terminées que l'utilisateur a dessinées dans le bitmap hors écran. Je pourrais en effet déplacer le code createScaledBitmap hors de onDraw, je l'avais juste là pour tester la copie/mise à l'échelle. –