총 게시물 38,219건, 최근 5 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

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

글쓴이 : hsw728 날짜 : 2017-01-09 (월) 18:06 조회 : 869
글주소 : http://www.androidside.com/B49/165757
 
  아동학습지도 한솔교육
놀이를 통한 신기한 교육 경험! 지구인재가 자라는 나라 아동문학
corp.eduhansol.com
  보육교사는 믿을수있는 에듀윌
6년연속 10만학점, 누적수강 100만학점 돌파! 3월 개강 선착순모집
www.studywill.net
  아동문학 쿠팡
인기 완구, 문구, 도서, 음반, 악기, 취미용품 특가, 쿠팡맨이 로켓배송!
www.coupang.com
클릭초이스 등록


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

안드로이드 스튜디오로 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;


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

도움을 부탁 드립니다.






질문자가 자신의 포인트 10 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 8을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

OSKiller 2017-01-09 (월) 18:31 추천추천 1 반대 0
리사이징한 이미지를 계속해서 쓰시는건 아닌지요?
A가 원본일때 확대한 A'를 가지고 다시 축소하여 A''를 만들고
A''를 다시 확대 하여 A'''만드는건 아닌지요?

확대를 하든 축소를 하든 스케일값만 변경 하고
실제로 이미지는 원본 이미지에서 스케일을 적용 하여 
이미지를 리사이징 해야 합니다
OSKiller 2017-01-09 (월) 18:31
베플로 선택된 게시물입니다.
리사이징한 이미지를 계속해서 쓰시는건 아닌지요?
A가 원본일때 확대한 A'를 가지고 다시 축소하여 A''를 만들고
A''를 다시 확대 하여 A'''만드는건 아닌지요?

확대를 하든 축소를 하든 스케일값만 변경 하고
실제로 이미지는 원본 이미지에서 스케일을 적용 하여 
이미지를 리사이징 해야 합니다
댓글주소 추천 1 반대 0
     
     
hsw728 2017-01-10 (화) 15:19
[@OSKiller]

답변 감사합니다. 말씀하신 것을 토대로

리사이징 방법을 찾아봐서 적용했는데요.

그래도 해결이 안되네요 ...


아래와 같이 코드를 짰습니다.


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(...)

{

   imageWidth=obsImage.getWidth();
   imageHeight=obsImage.getHeight();


   imagePercenteWidth=imageWidth/100;
   imagePercenteHeight=imageHeight/100;


   imageScaleWidth=(radius2*2)/imagePercenteWidth;
   imageScaleHeight=(radius2*2)/imagePercenteHeight;


   imageWidth*=(imageScaleWidth/100);
   imageHeight*=(imageScaleHeight/100);

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

}

else if(...)

{

   위 if문 코드와 동일

}


위처럼 해도 결국 똑같은 문제가 발생하네요.

사이즈가 바뀌는 매 순간마다 아래 코드를 집어넣으면

해결은 되기는 합니다.


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


그런데, 이러면 또 아예 새로운 문제가 발생합니다.

바로 렉이 걸리고 느려진다는 문제가 ...

댓글주소 추천 0 반대 0
          
          
노루골 2017-01-12 (목) 15:54
[@hsw728] Resource에서 bitmap를 로딩한 bitmap 전체를 그리면 속도가 많이 느립니다. 이미지에서 픽셀 단위로 구분하여 화면에 그려 줘야 속도가 빠릅니다. 화면크기에 맞추어서 원본이미지에서 해당 픽셀만 찾아서 그려주는 매핑테이블을 이용하면 속도가 더욱 빨라집니다.
댓글주소 추천 1 반대 0
          
          
노루골 2017-01-12 (목) 15:57
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기