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

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

글쓴이 : hsw728 날짜 : 2017-01-09 (월) 18:06 조회 : 1594
글주소 : http://www.androidside.com/B49/165757
 
  임베디드 시스템 마이크로비젼
임베디드 개발보드, 개발용역, IAR 컴파일러 총판, 에뮬레이터.
www.mvtool.co.kr
  코리아정보보안IT학원 최성우
신촌역위치, 방학특강, 시즌할인, 1:1멘토링, 취업100%지원안드로이드
koreaisecurity.com
  안드로이드/태블릿은 디퍼세븐
안드로이드 태블릿모니터,DID,사이니지,키오스크,디지털액자등(하드웨어및솔루션)
www.dippersevenmall.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 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기