Android:Canvas在移动Bitmap时会产生垃圾?

时间:2011-05-24 19:19:11

标签: android bitmap image-manipulation

我想使用Canvas“移位位图”;从位图创建一个位图,但是y偏移使得位图中的所有像素向下移动(顶部有空白像素)或向上移动(底部有空白像素)。我使用以下代码来执行此操作。只要我向上移动(shiftY为负),代码就可以正常工作,但如果我尝试向下移动,它会给出一个垃圾位图。

第二组代码是我为此工作的,但这会使我的内存使用量增加一倍。

有没有办法使用第二个Bitmap来移动Bitmap whitout?

//create canvas from the current Bitmap.
Canvas canvas = new Canvas (m_Bitmap);
/*draw into the current Bitmap into the canvas with an offset, thereby drawing over itself 
shifted pixels*/
canvas.drawBitmap(m_Bitmap, 0, shiftY, null); 

`

//create the canvas from a temp bitmap
Canvas canvas = new Canvas (m_2ndBitmap);
//draw the shifted pixels into the temp bitmap
canvas.drawBitmap(m_BackBuffer, shiftX, shiftY, null);

//swap the bitmaps  
Bitmap temp = m_Bitmap;
m_Bitmap = m_2ndBitmap;
m_2ndBitmap = temp;

3 个答案:

答案 0 :(得分:0)

当您向现有的Bitmap引用“新”或 Bitmap时,现有的Bitmap将可用于垃圾回收。

但是,不会在运行时创建对象:只需使用您预先分配的两个Bitmap,创建Canvas时跳过创建新的Canvas {{1}}。

答案 1 :(得分:0)

如果从底部逐行复制,您可以自己动手。问题是您的源和目标是相同的,它是从顶部复制,破坏下面的行,然后再将它们复制到较低的位置。

答案 2 :(得分:0)

尝试:

canvas.drawBitmap(Bitmap.createBitmap(m_BackBuffer), shiftX, shiftY, null);

而不是:

canvas.drawBitmap(m_BackBuffer, shiftX, shiftY, null);