2012-08-13 2 views
0

내 응용 프로그램에서 심각한 성능 문제가 발생했습니다. 비트 맵을로드하면 메모리가 많이 차지하는 것처럼 보입니다.여러 개의 고품질 비트 맵로드 및 크기 조정

모든 안드로이드 장치의 비트 맵 크기를 포함하는 드로어 블 폴더가 있습니다.이 비트 맵은 고품질입니다. 기본적으로 각 비트 맵을 따라 가고 크기에 따라 장치에 대해 새로운 비트 맵을 만듭니다. (올바른 방향과 모든 장치를 지원하기 때문에이 방법을 사용하기로 결정했습니다.) 그것은 작동하지만 많은 메모리를 사용하고로드하는 데 시간이 걸립니다. 누구나 다음 코드에 대한 제안을 할 수 있습니까?

public Bitmap getBitmapSized(String name, int percentage, int screen_dimention, int frames, int rows, Object params) 
{ 
    if(name != "null") 
    { 
     _tempInt = _context.getResources().getIdentifier(name, "drawable", _context.getPackageName()); 
     _tempBitmap = (BitmapFactory.decodeResource(_context.getResources(), _tempInt, _BM_options_temp)); 
    } 
    else 
    { 
     _tempBitmap = (Bitmap) params; 
    } 

    _bmWidth = _tempBitmap.getWidth()/frames; 
    _bmHeight = _tempBitmap.getHeight()/rows; 

    _newWidth = (screen_dimention/100.0f) * percentage; 
    _newHeight = (_newWidth/_bmWidth) * _bmHeight; 

    //Round up to closet factor of total frames (Stops juddering within animation) 
    _newWidth = _newWidth * frames; 

    //Output the created item 
    /* 
    Log.w(name, "Item"); 
    Log.w(Integer.toString((int)_newWidth), "new width"); 
    Log.w(Integer.toString((int)_newHeight), "new height"); 
    */ 

    //Create new item and recycle bitmap 
    Bitmap newBitmap = Bitmap.createScaledBitmap(_tempBitmap, (int)_newWidth, (int)_newHeight, false); 


    _tempBitmap.recycle(); 

    return newBitmap; 
} 

답변

0

공간을 절약 할 수 있습니다. 알파 색상을 사용하지 않으면 A 채널을 사용하지 않는 것이 좋습니다.

 Options options = new BitmapFactory.Options(); 
     options.inScaled = false; 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    // or Bitmap.Config.RGB_565 ; 
    // or Bitmap.Config.ARGB_4444 ; 

     Bitmap newBitmap = Bitmap.createScaledBitmap(_tempBitmap, (int)_newWidth, (int)_newHeight, options); 
+1

'_8888'(픽셀 당 4 바이트를 초과하는 4 바이트)은 메모리로 얻을 수있는 최대 크기입니다. 다른 구성 사용에 대한 나쁜 점은 드로잉 이미지가 예를 들어 사용하면 느려질 수 있다는 것입니다. gfx 하드웨어가 일반적으로 32 비트 컬러로 최적화 되었기 때문에 565입니다. – zapl

+0

예제를 제공하고 있었지만, 최종 압축은 사용에 따라 달라집니다. 나는 다양한 구성을 사용한다. 나는 스크롤 배경에 알파를 사용하지 않는다. 그 이유는 스크롤링 배경 뒤에 아무 것도 없기 때문이며, 보통 애니메이션을 빠르게 실행하기 때문에 폭발과 같은 것들을 압축한다. 전환했을 때 크게 좋아졌지만 사용법에 달려 있다고 생각합니다. – a54studio