2013-05-01 4 views
2

Java로 Android 프로젝트를 만들고 있습니다. 그러나 일부 비트 맵 메서드를 사용하여 참조가 얼마나 멀리 갈지 궁금합니다.Java Android 비트 맵 참조

Bitmap originalBitmap = BitmapFactory.decodeResource(resources, bitmapID); 

을 한 후 나는 기본 클래스의 생성자 내에서 객체로 보내 : 내가 원래 비트 맵이

은 좋아

class Test 
{ 
    Bitmap memberBitmap; 

    Test(Bitmap b) 
    { 
     memberBitmap = b; 
    } 
} 

이것은 지금까지 내가 memberBitmap는 아직 알 originalBitmap에 대한 참조입니다.

memberBitmap = Bitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter); 

는 이제 메모리에 새로운 비트 맵을 저장하거나 내가 originalBitmap을 변경 한 :하지만 내가 뭘하고 싶은 사용하여이 비트 맵의 ​​크기를 조정 기본적으로?

새로운 비트 맵을 만들었 으면 대신 원래의 비트 맵을 업데이트하도록 변경해야합니까?

처럼 : 그 API의 소리

memberBitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter); 

답변

0

, 그것은 아마 메모리에 새로운 비트 맵을 생성합니다. 생성자가 실행 된 후 두 객체의 toString()을 인쇄하여 메모리 위치가 동일한 지 확인할 수 있습니다.

두 번째 질문의 경우 originalBitmap을 새 Bitmap으로 변경하십시오.

0

사실 새로운 비트 맵을 만듭니다. 이 경우 새 비트 맵이 만들어지고 이전 비트 맵에 대한 참조가 손실됩니다. 당신은 코드과 같이 한 경우 :

memberBitmap = b; 
Bitmap scaledBitmap = Bitmap.createScaledBitmap(memberBitmap, newWidth, newHeight, filter); 

당신은 memberBitmap은 그대로 유지하고 scaledBitmap가 크거나 작은 버전이라고 볼 수 있습니다. 그러나 한 가지 예외는 스케일링이 전혀 수행되지 않아 어떤 경우에 참조가 memberBitmap으로 반환되고 동일한 객체에 대한 두 개의 참조가있는 경우입니다.

작업을 제거 할 수있는 한 가지 방법은 BitmapFactory.Options 매개 변수를 사용하여 처음부터 작게 비트 맵을 만드는 것입니다. 예를 들면 다음과 같습니다.

BitmapFactory.Options o = new BitmapFactory.Options(); 
o.inSampleSize = 2; 
Bitmap originalBitmap = BitmapFactory.decodeResource(resources, bitmapID); 

원본 이미지의 크기 (너비 및 높이)의 절반 인 비트 맵이 생성됩니다. 불행하게도 이것은 매우 제한적이며 inSampleSize 값은 2의 제곱이어야합니다.