2012-01-02 5 views
2

Android의 내 프로그램은 많은 setPixel 및 getPixel을 사용하는 알고리즘을 사용하므로 매우 느립니다. .NET에서는 LockBits를 사용하여 더 빠르게 만들 수 있습니다. Java 또는 Android에서 LockBits 또는 이와 유사한 것이 있습니까?안드로이드에서 비트 맵 LockBits?

편집 : 일부 검색을 수행 한 후 copyPixelToBuffercopyPixelFromBuffer을 찾았습니까? 필요한 항목인지 궁금하십니까?

+0

같은 문제에 대한 해결책을 찾았습니까? – TomP89

+1

@ TomP89 예, .NET LockBits보다 훨씬 쉽습니다.이 질문에서 언급 한 두 가지 방법을 사용하면 비트 맵 색상 데이터를 배열로 복사하고 그 반대로도 복사 할 수 있습니다. –

+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); 
관련 문제