2012-05-18 3 views
0

휴면 코드로 Img (비트 맵)를 회전하려고합니다. OME를 얻는다면 5-6 회전까지 잘 작동합니까?비트 맵 회전 중에 OME 가져 오기

private void rotateImg() { 
    Matrix matrix = new Matrix(); 
    matrix.postScale(curScale, curScale); 
    matrix.postRotate(curRotate); 
    try { 
     temp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), 
       temp.getHeight(), matrix, true); 
     setImage.setImageBitmap(temp); 
    } catch (OutOfMemoryError e) { 
     curRotate = curRotate - 45.0f; 
     Toast.makeText(this,"Out Of Memory",Toast.LENGTH_LONG).show(); 
    } 
} 

여기서 "test"는 SDCard에서로드 된 정적 비트 맵 파일입니다.

답변

1

매번 비트 맵을 생성하는 이유는 무엇입니까? 특별한 이유가 있습니까? 다음 코드를 사용하지 않는 경우 : 나는 우리가이 코드에 약간의 오류가 발생할 수 있습니다 생각

private void rotateImg() { 
    int cx = temp.getWidth()/2; 
    int cy = temp.getHeight()/2; 
    matrix.preTranslate(-cx, -cy); 
    matrix.postRotate(curRotate); 
    matrix.postTranslate(cx, cy); 
    setImage.setImageMatrix(matrix); 
} 
0

아마도이 메서드를 호출 할 때마다 bitmap.recycle() 메서드를 사용해야합니다. 다음과 같이 시도하십시오.

private void rotateImg() { 
    Matrix matrix = new Matrix(); 
    matrix.postScale(curScale, curScale); 
    matrix.postRotate(curRotate); 
    try { 
     temp.recycle(); //removes the memory occupied by this bitmap object 
      temp=null; 
     temp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), 
       temp.getHeight(), matrix, true); 
     setImage.setImageBitmap(temp); 
    } catch (OutOfMemoryError e) { 
     curRotate = curRotate - 45.0f; 
     Toast.makeText(this,"Out Of Memory",Toast.LENGTH_LONG).show(); 
    } 
} 
+0

을하지만, 다음 줄에 "임시"파일이 새로운 비트 맵을 만들 것을 사용하고 – user1395885

+0

"재활용 된 비트 맵을 사용하려고" 오 그래. 그 줄을 setImage.setImageBitmap (temp) 뒤에 추가 할 수 있습니까? 메서드를 호출하고 확인하십시오. –

1

첫 번째 대답은 아마도 하나의 잠재적 인 해결책 일 것입니다. 여기서 문제는 비트 맵 개체가 많이인데, 이는 상당히 큰 것이며 어떤 이유로 든 gc'd를 얻지 못한다는 것입니다.

더 좋은 해결책은 단일 비트 맵을 사용하고 그릴 때 회전/크기 조정을 적용하는 것입니다. 예를 들어, Canvas의 부분이 View 인 경우 rotateImg는 행렬을 회전하고보기에서 invalidate을 호출 한 다음보기의 onDraw 메서드에서 캔버스에 void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)을 사용하여 비트 맵을 렌더링 할 수 있습니다. 문서 도구는 here입니다.

관련 문제