2012-05-02 3 views
10

다음 코드는 내 비트 맵 정의스케일 된 비트 맵을 캔버스에 그립니까? 어떻게 수도,</p> <pre><code>c.drawBitmap(mBackground, 0, 0, null); </code></pre> <p>내 질문은 :

Resources res = context.getResources(); 

    mBackground = BitmapFactory.decodeResource(res, 
      R.drawable.bg2); 

    //scale bitmap 
    int h = 800; // height in pixels 
    int w = 480; // width in pixels  
    Bitmap scaled = Bitmap.createScaledBitmap(mBackground, w, h, true); // Make sure w and h are in the correct order 

을 ... 그리고 다음 코드/실행 (실제 크기의 비트 맵)를 그리는 데 사용 "Bitmap scaleed"형식으로 리턴 된 스케일 된 비트 맵을 그리도록 설정하고 원본은 그렇지 않습니까?

답변

25

새로운 클래스 멤버 변수 정의 : 여기에 새로 생성 된 스케일 비트 맵을 할당하고, 그런 다음 Bitmap mScaledBackground; 을 : 다음 mScaledBackground = scaled; 을, 드로우 방법에 호출 c.drawBitmap(mScaledBackground, 0, 0, null);

주 좋은 생각이 아니라고 위의 스 니펫 에서처럼 화면 크기를 하드 코딩합니다.

int width = getWindowManager().getDefaultDisplay().getWidth(); 
int height = getWindowManager().getDefaultDisplay().getHeight(); 

그리고 그것은 스케일 방법으로 원래의 배경을 그리기의 유일한 목적을 위해 새로운 비트 맵을 선언하지 않는 것이 좋을 것입니다 : 더 나은 다음과 같은 방법으로 장치의 화면 크기를 가져하는 것입니다. 비트 맵은 많은 귀중한 리소스를 소비하며, 일반적으로 휴대 전화는 앱이 비정상적으로 실패하기 전에로드 할 수있는 몇 MBB의 비트 맵으로 제한됩니다. 대신 당신이 뭔가를 할 수 있습니다 :

c.drawBitmap(mScaled,0,0,null); 

을 드로우 방법에 (:

Rect src = new Rect(0,0,bitmap.getWidth()-1, bitmap.getHeight()-1); 
Rect dest = new Rect(0,0,width-1, height-1); 
c.drawBitmap(mBackground, src, dest, null); 
+1

당신의 대답은 나를 위해 일했지만 인수에서 너비와 높이 1을 빼는 것은 표시된 비트 맵의 ​​오른쪽과 아래쪽에 다른 비트 맵에서 한 줄을 표시하여 -1을 제거한 것입니다. – akshay7692

+1

나는 이것이 이전 게시물이라는 것을 알고있다. 그러나 Android 7.0 이상에서는 화면 분할 모드에서 전체 디스플레이 너비/높이를 사용하지 못할 수 있습니다. 따라서이 솔루션을 사용하는 모든 사용자는이를 염두에 두어야합니다. – MCLLC

+0

이렇게하면 비트 맵이 매우 느리게 그려 집니까? – Amos

2

원하는 스케일 비트 맵 어딘가에 (여기 mScaled라고 함) 필드에 스케일 비트 맵을 저장하고 전화를 그리려면 또는 당신이 그것을 지금 어디에 부르는 지).

관련 문제