我想知道是否可以在绘制位图后仅将一部分位图加载到内存中而不创建新的位图。我看到Drawable有一个setBounds方法,但我不确定它是否只绘制区域集或调整整个图像的大小。谢谢。仅绘制Drawable/Bitmap的一部分
6
A
回答
9
假设你有一个主要的帆布画,你可以使用Canvas类的drawBitmap方法之一绘制加载位图的一个子集。
public void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)
2
我搜索的答案,正是这个问题,以便能够重新使用现有的位图我的形象缓存和避免内存碎片(以及随后的OutOfMemoryError ...),这是由许多引起的位图分配在内存空间的不同部分。 因此,我创建了简单的专用“BitmapSubsetDrawable”,它将自身公开为下划线位图的任意部分(该部分由scrRect确定)。 现在我分配一组足够大的位图一次,然后重新使用它们(canvas.drawBitmap(sourceBitmap,0,0,null);在它们上...)存储不同的位图。
该类的主要代码如下,实际用法见BitmapSubsetDrawable.java。
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. C#:仅绘制一部分路径
- 2. 仅绘制Highcharts中的部分数据
- 3. 如何强制QChartView仅绘制其本身的一部分
- 4. 绘制圆的一部分
- 5. 动画仅UIView绘制上下文的一部分?
- 6. 如何绘制椭圆的一部分?
- 7. 围绕NSString的一部分绘制框
- 8. CGImage的绘制部分
- 9. 如何仅使用awt或其他绘图机制部分绘制字符?
- 10. 仅在MonoTouch中绘制图像的特定部分
- 11. 仅绘制背景一次
- 12. 在JPanel的一部分中绘制而不重绘其余部分
- 13. 如何仅绘制可能较大和/或变焦的SVG的一部分?
- 14. OpenGL ES 2.0 - 如何仅使用着色器绘制纹理的一部分?
- 15. 如何绘制部分?
- 16. 线部分未绘制
- 17. drawBitmap()绘制假部分
- 18. 只绘制QwtCurve的一部分实时绘图
- 19. 让用户围绕图像的一部分绘制一个框
- 20. 没有部分绘制线条的TextView
- 21. setNeedsDisplayInRect:仅绘制一个白色矩形
- 22. 如何仅使用HTML 5画布绘制图像的圆形部分?
- 23. iOS:UIImage。如何仅复制图像的一部分
- 24. iOS在视图的一部分绘制渐变
- 25. 如何绘制图像的一部分与libgdx
- 26. Android HERE:如何绘制路线的一部分
- 27. 绘制图像的一部分开罗表面
- 28. Matlab代码不会绘制函数的一部分
- 29. 用openGL绘制图像的一部分glDrawPixels
- 30. 如何在WPF中绘制Bezier曲线的一部分?
这将调整整个位图,以适应目标矩形。 – jfisk 2010-12-23 00:33:53