마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

★★★ 안드로이드 스튜디오에서 canvas를 이용하여 Bitmap을 그리는데 화질이 점점 안좋아집니다. ★★★ [closed]

–1 추천
안드로이드 스튜디오로 Canvas를 이용한

Bitmap 이미지를 그려내는 코드를 짜는 중입니다.

 

그런데, 그냥 그리는게 아니라,

사이즈를 줄였다가 늘였다가를 반복하는

코드를 만들고 있는데요.

 

사이즈를 변화 시키지 않는 상태에서는

아무 문제가 없는데, 사이즈를 늘였다 줄였다를

시작하는 순간 화질이 급격하게 안좋아지더군요.

 

코드는 아래와 같이 되어 있어요.

 

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.wood);

image = Bitmap.createScaledBitmap(image, (int)radius*2, (int)radius*2, true);

 

canvas.drawBitmap(image, moveX1-radius, moveY1-radius, null);

 

if(...)

   ++radius;

else if(...)

   --radius;

 

원인과 해결 방법을 둘 다 알고싶습니다.

도움을 부탁 드립니다.
질문을 종료한 이유: 뭐 저딴 답변을 ;;; 에휴 ㅉㅉ ...
abchs8wyw (1,710 포인트) 님이 2017년 1월 9일 질문
abchs8wyw님이 2017년 1월 10일 closed
원본 데이터가 손상되서 그렇습니다.
예를 들어 원본데이터를 그대로 두시면 상관없지만.
640x480이미지를 320x240 로 축소를 하면 가로x세로 2pixel씩 4 pixel이 1 pixel에 들어가게 됩니다. 즉 3 pixel의 정보가 없어지게 됩니다.

예를 들어 { 1, 2, 3, 4} 의 데이터라면,  평균인 { 2.5} 로 들어가게 되는거죠..
이것도 정수라 버리거나 올려야 하니 실질적으론  { 2} 나 {3}이 들어가고요..

이걸 다시 640x480로 올리면, 1 pixel의 데이터를 4 pixel의 데이터로 다시 만들어줘야하는데, 1pixel의 데이터는 {2} 혹은 {3}의 밖에 없으니. { 2, 2, 2, 2} 혹은 { 3, 3, 3, 3} 과 같이 채워집니다. 그래서  화질 정보가 손상됩니다.

따라서 축소<->확대로 화질 유지는 어렵구, 정필요하다면, 축소는 상관없지만.
확대의 경우 원본 이미지를 보관하고 계셨다가 원본 이미지를 다시 그려주셔야 할 듯 합니다.

1개의 답변

0 추천
품질 저하 없이 확대/축소는 불가능합니다.

품질이 떨어지지 않게하려면 확대/축소를 하지마세요.
익명사용자 님이 2017년 1월 9일 답변 1 신고
뭐 이딴 답변이 다있노 ㅉㅉ
...