Me preguntaba si es posible dibujar solo una parte de un mapa de bits después de que se carga en la memoria sin crear un nuevo mapa de bits. Veo que Drawable tiene un método setBounds, pero no estoy seguro de si solo dibuja el área configurada o si simplemente cambia el tamaño de la imagen completa. Gracias.dibuja solo una parte de un Drawable/Bitmap
Respuesta
Suponiendo que tiene un lienzo principal para dibujar, puede utilizar uno de los métodos drawBitmap de la clase Canvas para dibujar un subconjunto del mapa de bits cargado.
public void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)
buscaba una respuesta a esta pregunta con exactitud con el fin de ser capaz de volver a utilizar mapas de bits existentes para mi caché de imágenes y para evitar la fragmentación de la memoria (y posterior OutOfMemoryError ...), que fue causado por lotes de mapas de bits asignados en diferentes partes de un espacio de memoria. Como resultado, creé un "BitmapSubsetDrawable" especializado y simple, que se expone como una parte arbitraria del mapa de bits subrayado (la parte está determinada por scrRect). Ahora asigno un conjunto de mapas de bits suficientemente grandes una vez, y luego los vuelvo a usar (canvas.drawBitmap (sourceBitmap, 0, 0, null); en ellos ...) para el almacenamiento de diferentes mapas de bits.
El código principal de la clase está a continuación, vea BitmapSubsetDrawable.java para el uso real.
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. Dibuja parte de un círculo
- 2. Pygame: dibuja un solo píxel
- 3. Mostrando solo una parte de un div
- 4. as3: dibuja un círculo con un agujero con solo actionscript
- 5. Enlazando solo parte de una etiqueta
- 6. video HTML5: reproducir solo una parte de un video
- 7. Dibuja un semicírculo lleno
- 8. meld: Hacer que una parte solo lea
- 9. ImageView: ¿Dibuja un color translúcido en la parte superior por su estado enfocado?
- 10. error: Una etiqueta solo puede ser parte de una declaración
- 11. obtener solo una parte de una matriz en Java?
- 12. Dibuja un semi anillo - JavaFX
- 13. HowTo: Dibuja una línea con una flecha?
- 14. Android dibuja un círculo alrededor del texto
- 15. ¿Cómo mostrar solo una parte de una imagen solo con la etiqueta img?
- 16. ¿Diseña/dibuja/dibuja primero una solución de desarrollo y luego la desarrolla? ¿Si es así, cómo?
- 17. ¿Cómo puedo comentar solo parte de una línea en Perl?
- 18. JavaScript regex replace - pero solo parte de una cadena combinada?
- 19. iframe para mostrar solo una parte determinada de la página
- 20. ¿Cómo elimino solo la parte superior de una caja sombreada?
- 21. Cómo firmar solo una parte específica de XML
- 22. ¿Cómo puedo verificar solo una parte de un repositorio de git durante una compilación de bambú?
- 23. OpenGL: ¿Cómo borrar solo una parte de la pantalla?
- 24. Cómo deserializar solo parte de un documento XML en C#
- 25. Actualizar solo parte de un archivo binario con C++
- 26. Java, extraer solo la parte fraccional de un BigDecimal?
- 27. Cómo sobrescribir solo parte de un archivo en C++
- 28. ¿Cómo se dibuja una imagen basada en un polígono simple?
- 29. ¿Cómo se dibuja una cuadrícula en un diagrama en Python?
- 30. CGContextDrawImage in Retina dibuja una imagen pixelada?
que redimensionaría todo el mapa de bits para encajar en el rectángulo de destino. – jfisk
que solo sería el caso si define que el rectángulo de origen tiene el mismo tamaño que el mapa de bits de origen entero o si es nulo. La definición de un rectángulo más pequeño buscaría un subconjunto. De las páginas de manual "Si el rectángulo de origen no es nulo, especifica el subconjunto del mapa de bits para dibujar" –