如何制作 BitmapDrawable 的深拷贝?
Posted
技术标签:
【中文标题】如何制作 BitmapDrawable 的深拷贝?【英文标题】:How do I made a deep copy a BitmapDrawable? 【发布时间】:2012-06-01 11:52:31 【问题描述】:我在克隆 BitmapDrawable 时遇到问题。我在this post 中尝试了答案,但它创建了一个“浅”副本,我需要一个“深”副本,这样我就可以在不影响原件的情况下更改克隆中的像素。
我也试过这个:
Bitmap bitmap = bdOriginal.getBitmap();
BitmapDrawable bdClone = new BitmapDrawable(getResources(), bitmap.copy(bitmap.getConfig(), true));
但它似乎创建了一个不可变的克隆,即使我将 Bitmap.copy() 中的可变参数设置为“true”。也就是说,滤色器似乎不会改变克隆。我做错了吗? (编辑:我使用调试器确认 bitmap.mIsMutable = true)
总而言之,我需要一个 BitmapDrawable 的克隆,它可以使用颜色过滤器进行更改,而不会影响原件。有什么建议吗?
提前谢谢...
【问题讨论】:
试试drawable方法mutable()
.
谢谢,但是 BitmapDrawable 仍然不受颜色过滤器的影响。 :( 我知道过滤器正在工作,因为它适用于原始位图和浅拷贝。
【参考方案1】:
-
创建相同大小的新
Bitmap
。
为这个新的Bitmap
创建画布
将您的第一个 Bitmap
绘制到此画布中。
例子:
Bitmap copy = Bitmap.createBitmap(original.getWidth(), original.getHeight(), original.getConfig());
Canvas copiedCanvas = new Canvas(copy);
copiedCanvas.drawBitmap(original, 0f, 0f, null);
【讨论】:
以上是关于如何制作 BitmapDrawable 的深拷贝?的主要内容,如果未能解决你的问题,请参考以下文章