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

이미지출력시 효율적인 방법이 있나요? Bitmap 만들어서 drawBitmap 출력중

0 추천
안드로이드에서 실시간 영상출력을하고 있는데요

Bitmap 객체를 만들어서 OnDraw에서 drawBitmap을 이용하여 출력중인데 프레임이 생각보다 떨어지더라구요

Bitmap 객체생성시 setPixel을 이용하여 이중for문을 돌아야하는데 여기서 많이 잡아먹는것 같습니다.

이미지출력시 좀더 효율적인 방법이 있을까요? Opengl을 이용하여 출력하면 더 빠를려나...
oblab (1,490 포인트) 님이 2015년 10월 7일 질문

3개의 답변

0 추천
 
채택된 답변
setPixel을 사용하신다면 일반적으로 속도가 많이 떨어지죠.

 Bitmap객체를 만드신다고 하셨는데 Bitmap을 만드실 소스의 상태가 무엇인가에 따라서 다른 접근방법들이 있을듯 합니다.

예를 들면 Bitmap생성하시려는 소스의 상태에서 부터 ARGB형태의 ByteArray data를 생성하실수 있다면 이 데이터를 이용해서 이미지를 생성할수도 있습니다.

또한가지 ndk를 이용하는 방법도 있을수 있겠습니다.
컴러기 (22,230 포인트) 님이 2015년 10월 7일 답변
oblab님이 2015년 10월 13일 채택됨
데이터를 얻는 형태가
int buf = new int[640 * 480] 으로 변수 선언
이중for문 640 480 에서
buf[y * 640 + x] = Color.rgb(r, b, b) 이렇게 640 * 480 for문을 돌아 데이터만듬

Bitmap bmp = Bitmap.createBitmap(buf, 640,480,Bitmap.Config.ARGB_8888) 로 비트맵 생성 후

ondraw에서 canvas.drawbitmap 이런 순서로 출력하고 있는데요..

간단하게 출력할수 있는 방법이 있을까요?
기본 컨셉은   oblab  님이한신방법이 맞는거 같은데요. 안드로이드에서 보다 효율이 높은 방법은 없어보입니다. 단지 화면의 직접출력이 여러번일경우 속도 저하고 일어나고 즉 하나의 화면전체의 이미지를 만들고 한번의 화면출력으로 하나의 프래임을 구성하게 하는것 그리고  보다 바른 화면 출력을 위한 뷰로는  surface  view 를 이용하는 방법이 있겠습니다.
그런데 일반이미지뷰를 사용해서도 생각이상의 프래임출력은 보장이 되는듯하던데요.. 실제로 에뮬상에서도 생각이상의 속도가나왔던걸로기억합니다.
ndk예제중 bitmap-plasma를 보시면 아시겠지만 이미지를 출력하는 속도는 이미지뷰도 그렇게 느린편은 아닙니다. 일반적으로 하나의 프래임을 랜더링하는 부분이 속도저하의 주된 원인이 되는경우가 많은것같습니다.
0 추천
그 상황에 사용이 가능한지는 모르겠지만 picaso 같은 라이브러리부터 써보세요
쎄미 (162,410 포인트) 님이 2015년 10월 7일 답변
0 추천
영상출력이라면 opencv를 쓰셔야죠.
Jinthree (8,980 포인트) 님이 2015년 10월 7일 답변
...