Android: Canvas дает мусор при смещении растрового изображения? - PullRequest
1 голос
/ 24 мая 2011

Я бы хотел использовать Canvas для «сдвига растрового изображения»;создать растровое изображение из растрового изображения, но со смещением y таким образом, чтобы все пиксели в растровом изображении либо смещались вниз (с пустыми пикселями вверху), либо смещались вверх (с пустыми пикселями внизу).Я использую код ниже, чтобы сделать это.Код работает нормально, пока я сдвигаюсь вверх (shiftY отрицательно), но при попытке сдвига вниз он выдает растровое изображение мусора.

Второй набор кода - это мой обходной путь, но это приводит к нежелательному удвоению использования моей памяти.

Можно ли как-нибудь сдвинуть растровое изображение, используя второе растровое изображение?

//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 голосов
/ 24 мая 2011

Вы можете сделать это самостоятельно, если копируете построчно снизу.Проблема в том, что ваш источник и пункт назначения одинаковы, и он копируется сверху, уничтожая строки внизу, прежде чем вы сможете скопировать их ниже.

0 голосов
/ 23 сентября 2013

Попробуйте:

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

вместо:

canvas.drawBitmap(m_BackBuffer, shiftX, shiftY, null);
0 голосов
/ 24 мая 2011

Когда вы ссылаетесь на "новый" или новый Bitmap на уже существующий Bitmap, уже существующий Bitmap будет доступен для сборки мусора.

Однако, не создавать объекты во время выполнения : просто используйте два Bitmap s, которые вы выделяете заранее, когда ваш Canvas был создан, и пропустите создание нового Canvas.

...