2011-05-02 7 views
0

내 안드로이드 앱이 여러 이미지를 연속으로 가져 왔습니다. takePicture()를 사용하여 사진을 찍을 때마다 BitmapFactory를 사용하여 바이트 배열을 PNG로 변환합니다. 최종 목표는 평균 16 개의 이미지를 얻는 것입니다. 프로세스를 가속화하기 위해 나는 16 개의 이미지를 생성하는 대신에 PNG를 생성하기 전에 바이트 어레이를 평균화 한 다음 평균화하려고 시도했습니다. 이 작업을 수행하는 방법에 대한 제안 사항은 무엇입니까?Java : Android에서 평균 16 개의 이미지 바이트 배열을 사용합니다.

간단히,이 같은 것을하고 싶지 :

imgByteArray1 = [1,2,3,4] 
imgByteArray2 = [4,3,2,1] 

totalImgByteArray = imgByteArray1 + imgByteArray2 
//totalImgByteArray will equal [5,5,5,5] 
aveImgByteArray = totalImgByteArray/2 
//aveImgByteArray will equal [2.5,2.5,2.5,2.5] 

그런 다음 aveImgByteArray에서 나는 PNG 파일을 만들 수 있습니다.

Android 2.3.1 Camera takePicture() Multiple images with one button click에서와 동일한 코드를 사용하여 이미지를 캡처합니다. 그런 다음

for(int i=0; i < data.length ; i++) 
    totalImgData[i] = (byte) (totalImgData[i] + data[i]); 

내가 16 개 이미지를 수집 한 후 배열에 걸쳐 평균 해요 : :

for (int j=0; j < totalImgData.length; j++) 
    aveImgData[j] = (byte) (totalImgData[j]/16); 

이 작동하지 않는 먼저 나는 1 개 바이트 배열에 바이트 배열를 수집하고 있습니다 ... 죄송합니다. 자바가있는 Android에 조금 새로운 것 같습니다.

+0

나는 지금 내가 시도하고있는 것으로 게시물을 업데이트했습니다. – kszup

답변

0

사진을 찍을 때마다 데이터가 포함 된 콜백에 byte[]이 표시됩니다. 그 정보를 추적하십시오, 예. --- 당신은 아마 메모리에 16 개 이미지를 저장하지 않으

//This isn't the best example (all the type casts), but it gives you the idea 
long avg = (long) Math.ceil((double) totalBytes/(double) count); 

나는 점이 있지만 무엇인지 확실하지 않다 : 당신은 당신이 평균을 계산할 수 있습니다 완료 그런

long totalBytes = 0; 
int count = 0; 

public void onPictureTaken(byte[] data ...) 
{ 
    .... 
    totalBytes += data.length; 
    count++; 
} 

동시에. 당신이 안드로이드에서 byte[]을 다시 얻을 때, 당신은 상당히 클 수있는 생 이미지 데이터를 가지고 있습니다. 그 중 16 가지를 저장하면 응용 프로그램에 큰 손실이 발생합니다 (충돌하지 않는다고 가정 할 때).

+0

답변 해 주셔서 감사합니다. 내 프로젝트의 경우 이미지에서 최대한 많은 노이즈를 제거해야합니다. 평균화하면 조금은 완치됩니다. 이미지는 480x360입니다. 나는 그것이 문제를 일으키는 지점까지 기억을 채울 것이라고 생각하지 않는다. 나는 그것을 밖으로 시도 할 것이다. 16 개의 모든 어레이를 메모리에 보관해야합니까? 그냥 totalBytes에 추가합니다. 그것은 더 큰 기억 - 현명한 권리를 얻지 않을 것인가? 값이 증가합니다. totalBytes + = data.length가 어떻게 작동하는지 이해하지 못하겠습니까? – kszup

+0

이미지에서 노이즈를 제거하여 무엇을 의미하는지 확신 할 수 없으므로 이미지를 조작해야하는 경우 어레이가 가비지 수집으로 표시되기 전에 마지막 onPictureTaken이 있기 때문에 바이트를 저장해야합니다. 'totalBytes + = data.length'는 # 바이트 합계를 유지합니다. 'totalBytes = data.length + totalBytes'와 같습니다. – debracey

관련 문제