Je me demandais s'il est possible de dessiner seulement une partie d'un bitmap après qu'il soit chargé en mémoire sans créer un nouveau bitmap. Je vois Drawable a une méthode setBounds mais je ne suis pas sûr si elle ne dessine que l'ensemble de la zone ou redimensionne juste l'image entière. Je vous remercie.dessiner seulement une partie d'un dessin/Bitmap
Répondre
En supposant que vous ayez un canevas principal à dessiner, vous pouvez utiliser l'une des méthodes drawBitmap de la classe Canvas pour dessiner un sous-ensemble du bitmap chargé.
public void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)
J'ai cherché une réponse à exactement cette question afin de pouvoir réutiliser les bitmaps existants pour mon cache d'image et d'éviter la fragmentation de la mémoire (et OutOfMemoryError ultérieure ...), qui a été causée par beaucoup de bitmaps alloués dans différentes parties d'un espace mémoire. En conséquence, j'ai créé simple "BitmapSubsetDrawable" spécialisé, qui s'expose comme une partie arbitraire de la Bitmap souligné (la partie est déterminée par scrRect). Maintenant, j'attribue un ensemble de Bitmaps assez grand une fois, puis les réutilise (canvas.drawBitmap (sourceBitmap, 0, 0, null), sur eux ...) pour le stockage de différentes bitmaps.
Le code principal de la classe est ci-dessous, voir BitmapSubsetDrawable.java pour une utilisation réelle.
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
public class BitmapSubsetDrawable extends Drawable {
private Bitmap bitmap;
private Rect scrRect;
public BitmapSubsetDrawable(@NonNull Bitmap bitmap, @NonNull Rect srcRect) {
this.bitmap = bitmap;
this.scrRect = srcRect;
}
@Override
public int getIntrinsicWidth() {
return scrRect.width();
}
@Override
public int getIntrinsicHeight() {
return scrRect.height();
}
@Override
public void draw(Canvas canvas) {
canvas.drawBitmap(bitmap, scrRect, getBounds(), null);
}
@Override
public void setAlpha(int alpha) {
// Empty
}
@Override
public void setColorFilter(ColorFilter cf) {
// Empty
}
@Override
public int getOpacity() {
return PixelFormat.OPAQUE;
}
public Bitmap getBitmap() {
return bitmap;
}
}
- 1. Dessiner seulement une partie d'une vue personnalisée
- 2. Comment dessiner seulement cette partie de l'arc?
- 3. UIImage étirer seulement une partie
- 4. Dessiner une boîte sur une image, javascript seulement?
- 5. Animer seulement une partie d'un élément
- 6. Xpath sélectionner seulement une partie d'un attribut
- 7. Afficher seulement une partie d'un div
- 8. Comment capturer seulement une partie d'un identifiant?
- 9. Effacer seulement une partie de matplotlib figure
- 10. Cocos2d afficher seulement une partie d'un CCSprite
- 11. Charger seulement une partie du fichier
- 12. Exécutez TestSetup seulement une partie du temps?
- 13. NSKeyedArchiver encode seulement une partie d'un tableau
- 14. Afficher seulement une partie de SlidingDrawer?
- 15. jQuery: Renvoie seulement une partie d'un texte
- 16. Comment redessiner seulement une partie du framebuffer de présentation?
- 17. Dessin seulement une partie d'un OpenGL texture ES iPhone
- 18. Afficher seulement une partie de chaîne dans une TextView
- 19. Créer une miniature de seulement une partie d'une image
- 20. Faire une image suit seulement une partie d'un CGPath
- 21. Dessin d'une partie d'une page seulement après une autre partie a été « soumis »
- 22. iOS dessiner un dégradé dans une partie de la vue
- 23. Dessiner une petite partie de grande image dans iOS rapide
- 24. Redimensionner seulement une partie de la texture, OpenGL
- 25. Comment extraire seulement une partie de chaîne en PHP?
- 26. Récupérer seulement une partie de l'URL à distance dans AJAX
- 27. Seulement obtenir une partie de la chaîne dans Android?
- 28. comment imprimer seulement une partie d'une page Web dans php
- 29. WPF. Comment montrer seulement une partie de la grande toile?
- 30. Projeter seulement une partie de SVG sur Google Map
qui redimensionnerait la totalité de l'image bitmap pour l'insérer dans le rectangle de destination. – jfisk
cela ne serait le cas que si vous définissiez le rectangle source comme étant de la même taille que l'ensemble de l'image source ou qu'elle soit nulle. Définir un rectangle plus petit irait chercher un sous-ensemble. Depuis les pages de manuel "Si le rectangle source n'est pas nul, il spécifie le sous-ensemble de l'image bitmap à dessiner" –