2012-05-20 5 views
2

비트 맵을 캔버스를 사용하여 그리는 방법을 알아낼 수 없으므로 결과가 장치 밀도에 영향을받지 않습니다. 나는 Bitmap result에서 big_picture을로드하고 난 그것에하지만, 지정한 위치에 small_picture을 그리려는비트 맵 + 캔버스 밀도 종속성

ImageView iv = (ImageView)findViewById(R.id.container); 
Bitmap result = BitmapFactory.decodeResource(getResources(), R.drawable.big_picture).copy(Bitmap.Config.ARGB_8888, true); 
Canvas canvas = new Canvas(result); 
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.small_picture), actualX, actualY, null); 
iv.setImageBitmap(result); 

:

다음은 도면을 만드는 코드입니다. 내가 실제 X를 설정하고 실제로 동일한 밀도를 갖는 장치에서는 ok입니다. 그러나 밀도가 다른 장치는 캔버스를 "확장"합니다.

재미있는 부분은 small_picture 만 "크기 조정"되어 화면 밖으로 나 오지만 그 뒤에있는 pig_picture는 모든 농도 화면에서 화면에 잘 맞습니다. 왜 그럴까요? 어떻게하면 big_picture densitiy에 small_picture를 독립적으로 그릴 수 있습니까? 감사합니다.

답변

2

Bitmap을 디버깅 한 후 어떤 상황인지 알았습니다. 이미지를 drawable-nodpi에 넣지 않는 한 이미지는 공칭 장치 밀도와 일치하도록 크기가 조정됩니다. (120, 160, 240, 320) BitmapCanvas에 이미지를 "로드"하면 원본 이미지와 상관없이이 밀도 중 하나가됩니다.

한 가지 해결책은 이미지를 drawable-nodpi에 넣는 것입니다. 그 후에 그들은 모든 밀도에서 똑같이 행동 할 것입니다.

다른 해결책은 위의 밀도 비율에 따라 좌표를 곱하는 것입니다.

... 또는 모든 한정자에 대해 맞춤 이미지와 좌표를 만들 수 있습니다.

+1

다른 옵션은 inScaled = false를 사용하여 BitmapFactory.Options 객체를 전달하는 것입니다. http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html –

관련 문제