본문 바로가기

android

[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함수를 한번.. 더보기
[Android] RGB 색깔 테이블 색깔을 입힐 때, Hex코드는 이해하기 힘드니 Color.rgb(red, green, blue); ex> Snow : Color.rgb(255,250,250); 위 코드 형태로 RGB값으로 지정하자. Whites/Pastels Color Name RGB CODE HEX # Sample Snow 255-250-250 fffafa Snow 2 238-233-233 eee9e9 Snow 3 205-201-201 cdc9c9 Snow 4 139-137-137 8b8989 Ghost White 248-248-255 f8f8ff White Smoke 245-245-245 f5f5f5 Gainsboro 220-220-220 dccdc Floral White 255-250-240 fffaf0 Old Lace 253-2.. 더보기
[Android] HeapSize확인! Log.d("DEBUG", "Heap Size : "+Long.toString(Debug.getNativeHeapAllocatedSize())); 위 로그를 사용하여 매번 출력해줘서 HeapSize에 변화를 확인한다. 참고로 전 Sky VegaS를 테스트 해봤을 때, 결과값이 약140000000 이상이 될 경우 핸드폰이 멈춰버리는 현상이 발생하였습니다. HTC 디자이어 HD같은 경우는 그 전에 Out of memory가 발생하고 종료 되어버리구요. Bitmap을 사용하거나 리스트 배열에 이미지를 다룰 경우 주의사항! 1. Bitmap을 계속 사용하지 않을 경우에는 삭제한다. bitmap.recycle(); bitmap = null; 2. Bitmap을 불러들이는 부분이 매번 추가되지 않는지 확인한다. 특.. 더보기
[Android] drawable-hdpi,drawable-mdpi,drawable-ldpi 안드로이드에선 drawable폴더에는 이미지파일을 넣어 둡니다. 모두들 알다시피, 안드로이드는 다양한 해상도를 1.6버전부터 제공하게 되었습니다. 그래서 그 해상도에 맞춰서 이미지의 사이즈도 조절을 해줘야 합니다. 이 때!! 해상도를 매번 확인하지 않고, 사용자가 drawable 폴더를 3개를 나눠서 지정을 해 놓으면, 자체적으로 해상도에 맞게 이미지가 적용이 되는 거지요. 당연 이미지에 접근 할 때는 -hdpi나 -mdpi는 필요없이 그냥 drawable을 통해서 이미지를 접근할 수 있습니다. [이미지 접근 방법] Resources res = context.getResources(); ImgData imgData = data.getBackground(); Bitmap background = null; .. 더보기
[Android] Opengl 텍스쳐 변경 시!!! 제가 하루 동안 갑자기 발생한 Memory over flow 때문에... 원래 제출 해야하는 날보다 하루 미루게 되었던 대 사건의 원인을 적어볼까 합니다. - 테스트 폰 : HTC 디자이어 HD, Sky Vega X - 문제: LiveWallpaper의 설정을 여러 번 바꾼 후에, 갑자기 핸드폰이 멈춰버리는 대 사건이!-0- - 원인: 거의 5시간을 걸쳐 디버깅 하고, 구글리을 해서 알아낸 결과! heap memory가 사라지지 않고, 계속 쌓이는 것이었습니다. 처음 Bitmap의 초기화를 잘 못했나 해서 받아들인 Bitmap에 전부 초기화를 했습니다. [Bitmap 초기화 방법] gl.glGenTextures(textures.length , textures, 0); gl.glBindTexture(GL1.. 더보기