Android Mise À L'Échelle De La Toile Bitmap
J'ai une application de dessin qui permet à l'utilisateur de dessiner sur une toile vierge. Je suis tenter de dessiner une échelle de "vignettes" de l'actuel bitmap de sorte que lorsque l'utilisateur a l'échelle de la Vue, ils peuvent faire référence à la vignette pour avoir une idée de l'endroit où ils sont dans l'ensemble du tirage de la toile. J'ai la mise à l'échelle de travail, et je suis de l'affichage de la vignette dans l'emplacement correct, mais il semble que la vignette n'est pas mis à jour sur les onDraws lorsque de nouvelles lignes/formes sont ajoutés.
Alors que j'ai accès à la sous-jacentes bitmap de ce point de vue (pour afficher la vignette, être en mesure de facilement sauvegarder l'image dans un fichier, etc) je ne le suit dans onSizeChanged() pour l'Afficher:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
//set the canvas height, panning, etc, based on the now inflated View
mWidth = getWidth();
mHeight = getHeight();
mAspectRatio = mWidth / mHeight;
mPanX = 0;
mPanY = 0;
//create the Bitmap, set it to the canvas
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas.setBitmap(mBitmap);
draw(mCanvas);
}
Ensuite, lorsque l'utilisateur dessine et invalidate() est appelée, je ne le suit dans onDraw() pour générer la miniature:
@Override
protected void onDraw(Canvas canvas) {
<snipped code that draws paths, shapes to canvas>
if (mScaled) {
Bitmap out = Bitmap.createScaledBitmap(mBitmap, (int) thumbWidth, (int) thumbHeight, false);
canvas.drawBitmap(out, null, thumbnailRectF, thumbCanvasPaint);
}
}
La vignette s'affiche dans l'espace défini par thumbnailRectF à l'aide de la thumbCanvasPaint, mais dans les onDraw() appelle, à l'échelle bitmap n'a pas changé de son état d'origine, même si la pleine taille active de la toile montre tous les dessins, etc. Basé sur des tests, il me semble que je suis en train de l'image Bitmap à l'appel initial à dessiner(mCanvas);, à la suite onDraws sont écrit à la sous-jacentes Bitmap plutôt que celui spécifié dans onSizeChanged().
Donc, je suppose que je suis en train d'essayer de comprendre comment je la cravate de la onDraw toile à une image que je peux readliy d'accès pour effectuer des re-tailles, enregistrer, etc. En regardant cette question, j'ai pensé que le tirage au sort(mCanvas); appel lierait les onDraw à l'image spécifiée dans le mCanvas (dans mon cas, mBitmap), mais dans la pratique, il ne semble pas être un travail, dans la mesure où updats de la toile sont concernés.
Merci,
Paul
OriginalL'auteur Paul Mennega | 2011-02-07
Vous devez vous connecter pour publier un commentaire.
devrait changer pour
Il n'est pas nécessaire pour
Également vérifier que mScaled est vrai tout le temps quand le zoom est supérieur à 1
OriginalL'auteur Lumis
Échelle bitmap par
Bitmap.createScaledBitmap
puis tirage au sort aura pas de travailLa solution à l'échelle de la toile bitmap est d'utiliser cette fonction (à partir de la docs)
donc en changeant la taille de
dst
, votre taille du bitmap va changerIci est un exemple, si je veux dessiner une image bitmap en haut à gauche et échelle à
100px x 120px
OriginalL'auteur Phan Van Linh