我想使用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;
答案 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);