본문 바로가기

나의 플랫폼/안드로이드

[ Android ] 비트맵에 이미지나 뭔가를 그릴 때 뜨는 에러! java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor Bitmap bitmap = BitmapFactory.decodeFile(..); Canvas canvas = new Canvas(bitmap); canvas.save(); canvas.drawbitmap(...); ... canvas.restore(); 위 와 같은 형식에 소스에서 디버깅을 하면 회색 네모상자의 에러가 나옵니다. BitmapFactory에서 불러온 이미지는 수정이 불가능 하다고 하네요. 크기나 뭐 옵션 같은 것은 줄 수 있겠지만요^^ 그래서 똑같은 비트맵을 복사함으로써 해결이 됩니다. Bitmap bitmap = BitmapFactory.decod.. 더보기
[Android NDK] NDK Hello 실행하기 출처 : http://micropilot.tistory.com/1522 위 링크로 가시면 문자열 값을 출력하는 것 까지 자세한 정보가 있습니다. 그대로 따라하시면 되는데요. 사이사이에 제가 겪은 문제점들을 적어 놀까 합니다. 1. ../ndk-build 명령어를 쳤더니 위와 같은 에러가 났을 경우. 혹시, android ndk 가 Program files 밑이나 띄어쓰기가 있는 이름 폴더의 하위 폴더 일 경우 인지 확인해보세요. 절대! cygwin 설치에 문제가 아닙니다. 가장 안전한 방법! c:\android-ndk-xxxx로 해놓으시는게 가장 좋을 듯! 2. cygwin 설치 시, ftp://ftp.kaist.ac.kr이 안보일 경우 그냥 아무거나 하셔도 됩니다. 한국 사이트라 다운로드 속도가 빠른 .. 더보기
[Android] Live Wallpaper 미리보기인지 아닌지 확인 WallpaperService.Engine의 isPreview() 함수로 확인이 가능합니다. if(isPreview()){ Log.d("DEBUG","현재 미리보기 실행 중입니다."); }else{ Log.d("DEBUG","실제 배경화면이 실행 중입니다."); } 출처: http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html 더보기
[Android] 배경화면에 이미지를 표현할 때 참고사항 배경화면에 이미지를 출력할 때, offset까지 생각을 해서 화면보다 좌우를 더 크게할 경우가 많으시죠. 그럴 경우, 이미지가 커지고 출력할 때 과부하가 생기기도 합니다. 즉, 큰 이미지의 딱 화면 크기 정도만 가져와서 표현을 하게 되면, 과부하가 생길 이유가 없겠죠. 하늘색 부분만 보이도록 하는 것이지요! 소스는 다음과 같습니다. RectF rect = new RectF(0, 0, screenSizeWidth, screenSizeHeight); // 네모 상자 크기 지정 Matrix matrix = new Matrix(); matrix.mapRect(rect); matrix.setTranslate(mOffsetX, 0); // offset설정 mainCanvas.drawBitmap(mainBmp,mat.. 더보기
[Android] 진저브레드도... Opengl은 16비트컬러 출처:http://www.androidcentral.com/some-details-about-gingerbreads-ui-changes 위 내용을 보면... 아직 Opengl이 24비트를 지원 안되어있습니다. 모토로라는 24비트를 지원해서 조금 깨끗한 화면은 연출할 수 있지만... 다른 핸드폰에서는 디더링을 해도... 점 같은 모양이 생기는 것을 막을 수는 없네요... 다음 버전에는 24비트가 지원 되었으면 좋겠네요. 더보기
[Android] java.lang.OutOfMemoryError: bitmap size exceeds VM budget 이건 한정된 메모리를 초과 했을 때 뜨는 오류 입니다. 먼저 , 전에 제가 적은 블로그 내용을 확인해보고, 그래도 안될 시에는 이 방법을 해보세요. http://gogorchg.tistory.com/entry/Android-BitmapFactory%EC%97%90-%EB%AC%B8%EC%A0%9C%EC%A0%90 Bitmap이 차지하는 메모리가 급속하게 줄어듭니다. Bitmap bitmap; BitmapFactory.Options option = new BitmapFactory.Options(); option.inSampleSize = 1; option.inPurgeable = true; option.inDither = true; bitmap = BitmapFactory.decodeResource(mRe.. 더보기
[Android] BitmapFactory에 문제점 BitmapFactory를 이용하여 Decode할 경우, Out of memory 에러가 자주 발생하죠. Bitmap bitmap; BitmapFactory.Options option = new BitmapFactory.Options(); option.inSampleSize = 2; bitmap = BitmapFactory.decodeResource(mRes, mRes.getIdentifier(fileName, null, null), option); 보통 위 같은 경우에는 에러는 막을 수 있지만, 보시면 아는 바와 같이 Bitmap크기를 반으로 줄여버립니다. 저장한 Bitmap을 사용할 때, 2배로 키우게 되면 이미지가 깨지게 되죠. Bitmap.createScaledBitmap(src, dstWidth.. 더보기
[Android] Bitmap에 그림 그리기. 항상 drawLine이나 drawCircle같은 함수를 매번 추가해야 할 경우, 혹시 For문으로 돌리고 계시지는 않는 지요? 그럼 시스템적으로 부화도 많이 생기고, 느려지는 것을 느낄 수 있습니다. Canvas 자체적으로 다시 초기화를 하지 않고,겹쳐서 그릴 경우에는 그대로 계속 그리면 되지만, 다시 깨끗하게 화면을 초기화 하고 다시 출력할려고 하면 다시 그 수만큼 사용을 해야하죠. for(int i = 0 ; i < 100 ; i++) c.drawLine(0,0,100,100,paint); 위와 같은 코드로는 drawLine을 100번 출력하게 되는 대박 코딩이 되는 거죠-0-;; 그래서 지금까지 그린 것을 Bitmap에 저장시켜 놓은 후, 그것을 다시 호출해서 사용하면 drawBitmap함수를 한번.. 더보기