2012-01-02 4 views
2

Моя программа на Android использует алгоритм, который использует множество setPixel и getPixel, поэтому он очень медленный. В .NET я могу использовать LockBits, чтобы сделать это быстрее. Есть ли LockBits или аналогичные на Java или Android?Bitmap LockBits на Android?

EDIT: После некоторых поисков я нашел copyPixelToBuffer и copyPixelFromBuffer, интересно, если это то, что мне нужно?

+0

Вы когда-нибудь находили решение своей проблемы, так как мне также было интересно, что такое же? – TomP89

+1

@ TomP89 Да, это намного проще, чем .NET LockBits, просто используйте 2 метода, о которых я упоминал в вопросе, он скопирует ваши данные цвета растрового изображения в массив и наоборот. –

+0

Отлично Спасибо! – TomP89

ответ

3

Да, вы должны использовать вышеуказанные два метода и использовать объект ByteBuffer, где вы сначала сохраните все данные растрового изображения. После этого скопируйте все данные буфера в массив байтов, а затем вы сможете делать все манипуляции с помощью argb внутри этого массива. После всего этого заверните этот массив байтов в недавно выделенный ByteBuffer, а затем, наконец, скопируйте пиксели обратно из этого буфера в исходное растровое изображение. Вот несколько примеров: «bmpData» - это ваш объект Bitmap, содержащий данные пикселя изображения.

int size = bmpData.getRowBytes()*bmpData.getHeight()*4; 
ByteBuffer buf = ByteBuffer.allocate(size); 
bmpData.copyPixelsToBuffer(buf); 
byte[] byt = buf.array(); 
    for(int ctr=0;ctr<size;ctr+=4) 
    { 
     //access array in form of argb. for ex. byt[0] is 'r', byt[1] is 'g' and so on.. 
    } 
ByteBuffer retBuf = ByteBuffer.wrap(byt); 
bmpData.copyPixelsFromBuffer(retBuf);