2012-07-06 3 views
3

동일한 사각형을 항상 그려야하는 경우 정적 비트 맵 또는 canvas.drawRect()를 사용하여 더 빨리 수행 할 수 있습니까?Android Canvas - 사각형 또는 사각형의 그림 그리기

이 예에서 4 개의 직사각형이 있습니다. 채우기 색상이있는 하숙인, 중간 색상과 채우기 색상 사이의 하숙인.

그래서 네 개의 paint.setColor() 명령과 네 개의 canvas.drawRect 명령 또는 한 개의 canvas.drawBitmap().

+2

왜 시간을 보내지 않으십니까? – Cheesebaron

+0

시간을 할애하면 paint.setColor(); 당신은 드로 루틴에서 당신의 페인트를 바꾸어서는 안됩니다, 당신은 4 개의 페인트가 있어야합니다. 각 직사각형에 대해 각각을 사용합니다. 또는 동일한 색상을 칠하는 경우 다시 사용하십시오. – Tatarize

답변

3

나는 강력하게 drawRect()을 권장합니다.

비트 맵은 엄청난 양의 메모리를 차지하며 올바르게 사용되지 않을 경우 Out Of Memory 예외가 발생할 수 있습니다. 안드로이드 글

는 :

비트 맵 특히 사진과 같은 풍부한 이미지, 메모리를 많이 차지합니다. 예를 들어 Galaxy Nexus의 카메라는 최대 2592x1936 픽셀 (5 메가 픽셀)의 사진을 찍습니다. 사용 된 비트 맵 구성이 ARGB_8888 (Android 2.3 이후의 기본값) 인 경우이 이미지를 메모리에로드하면 약 19MB의 메모리 (2592 * 1936 * 4 바이트), 이 즉시 일부 장치의 앱당 한도를 소모합니다.

두통 및 예상치 못한 충돌을 방지합니다. 사용 drawRect();

다른 개체에 대해이 4 가지 그림을 정기적으로 수행하는 경우 모두 4를 수행하는 방법을 작성하는 것이 좋습니다. 그래서 당신은 거대한 반복을 일으키지 않습니다. 예를 들어

: 당신이 그것을 장점을 가지고 않기 때문에, 비트 맵을 그리기 위해 이동하는 경우에

public void DrawMyRect(Canvas canvas, int x, int y) 
{ 
    canvas.drawRect(x, y ,x + 15, y + 40, paint); 
    // Draw its line etc etc.. 
} 

또는 :

See this epic Link by Android, on how to properly use Bitmaps

+0

이것에 대해 : http://stackoverflow.com/questions/5643151/load-bitmap-or-draw-graphic-performance-question 나는 혼합 된 반응을 얻고있다. 그리고 내 이미지는 충분히 작아서 메모리 오류가 없어야합니다. 성능은 지금 내가 신경 써야 할 모든 것입니다. 6 개의 32x32 이미지가 있습니다. –

+0

내 대답에 추가되었습니다. 작은 이미지를 사용하는 경우 실제로 문제가 있어서는 안됩니다. 어느 쪽도 성능의 확실한 증가는 없을 것입니다. 나는 1 초도 채되지 않아 수백 줄/모양 등을 그릴 수있는 앱을 가지고있다. 소량의 도형을 사용하고 있다면 성능 문제가 발생하지 않습니다. 비트 맵을 사용하는 경우 링크를 따라 가면서 효과적으로 수행 할 것을 권장합니다. – Doomsknight

+0

@NathanTornquist. 말할 것도없이, 비트 맵은 고정 크기가 될 것이므로 크기를 조정하면 결국 더 나빠질 수 있습니다. DrawRect는 선명하고 선명하며 모양/요구 사항에 맞게 모양을 잃지 않고 쉽게 변경할 수 있습니다. – Doomsknight

0

성능 차이는 아마도 무시할 수있다. 비트 맵은 더 많은 메모리를 사용하고, 캔버스 draw 호출은 약간 더 많은 CPU를 사용합니다. 비트 맵 오버 헤드없이 통화를 줄이려면 ShapeDrawable을 사용할 수 있습니다.