[안드로이드로 배우는 OpenCV] 허프 변환 – 직선 검출 하기

허프 변환(Hough Transform) 허프 변환은 이미지에서 선과 원 같은 단순한 형태를 찾는 방식이다. 이진화 된 이미지에서 직선을 찾을 때 상대적으로 빠른 검출을 보여준다. 허프 선 변환(Hough line transform) 허프 선 변환의 기본 개념은 2차원 이미지 상의 어떠한 점은 선의 일부라는 사실을 기초로 한다. 선분의 기울기를 a라고 가정하고 y절편을 b라고 할 더보기…

Gradle 스크립트 언어를 Groovy DSL에서 Kotlin DSL로 변경 하기

Migrating Groovy DSL to Kotlin DSL Kotlin DSL 이란? DSL이란 Domain Specific Language의 약어로 특정 분야에 최적화된 프로그래밍 언어를 뜻한다. 상용구 코드를 최소화 하기 위해 명령형 코드 대신 선언적 코드 형식을 따른다. Kotlin DSL은 코틀린의 언어적인 특징으로 가독성이 좋고 간략한 코드를 사용하여 Gradle 스크립팅을 하는 것을 목적으로 하는 DSL이다. 빌드 더보기…

Android 12 빠르게 살펴보기!

Android12 미리보기 안드로이드 12에 대한 최신 정보는 공식 문서에서 확인할 수 있다. 안드로이드는 전통적으로 메이저 버전에 알파벳 순으로 디저트 이름을 붙여왔다. Pie 이후로는 Q로 시작하는 이름대신 Android10이라 명명했다. 하지만 내부적으로는 여전히 디저트 이름을 붙이고 있다 Queen Cake(or Quince Tart, Android10) Red Velvet Cake (Android11) Snow Cone (Android12) 출시 일정 2021년 더보기…

mds_store의 CPU 점유율이 갑자기 치솟을 때

  아무것도 안했는데 갑자기 맥이 버벅이기 시작했다. ActivityMonitor를 띄워 CPU 점유율이 높은 프로세스 순으로 나열하니 mds_store가 점유율을 엄청나게 가져가고 있었다.  mds_store가 무엇인지 검색해보니 Spotlight관련 프로세스라고 한다. 아마 백그라운드에서 인덱싱을 하면서 점유율을 엄청 가져가는 것 같은데 잠자기 모드 일때 안하고 왜 지금하는지 모르겠다. 나는 알프레드를 사용하기 때문에 Spotlight는 사용하지 않는다. 그래서 더보기…

글쓴이 Charlezz,

Jetpack Compose의 등장배경을 알아보자.

Jetpack Compose는 네이티브 Android UI를 빌드하기 위한 최신 선언형 UI 툴킷이다. Jetpack Compose는 적은 수의 코드, 강력한 도구 및 직관적인 Kotlin API로 Android에서의 UI 개발을 간소화하고 가속화한다. Declarative UI Programming? 선언형 UI프로그래밍(Declarative UI Programming)은 기존의 명령형 UI 프로그래밍과 달리 View의 상태(State)만 선언하고 자세한 구현은 프레임워크에게 맡기는 방법을 의미한다. 왜 Compose가 더보기…

글쓴이 Charlezz,

LeakCanary로 메모리 누수 잡기

LeakCanary란? LeakCanary는 안드로이드를 위한 메모리 누수 감지 라이브러리다. 안드로이드 프레임워크 내부 이해를 통해 메모리 누수의 원인을 줄이는 기능을 제공하여, 개발자가 OOM(Out Of Memory)에러로 인한 크래시를 줄일 수 있도록 도와준다. 메모리 누수란? 애플리케이션이 더 이상 필요하지 않은 객체에 대한 참조를 유지함으로써 결과적으로 해당 객체에 할당 된 메모리를 회수 할 수 없어 더보기…

글쓴이 Charlezz,

MediaStore에 이미지, 비디오 질의 시간 비교 테스트

배경 다양한 질의를 통해, 가장 빠른 응답시간을 보이는 방법을 알아본다. 테스트 환경 Galaxy S9, 이미지 80507개, 동영상 29개 쿼리 타입 1번타입 – 파일 콘텐츠 Uri  + 이미지 타입만 거르기 contentResolver.query( MediaStore.Files.getContentUri(“external”), null, MediaStore.Files.FileColumns.MEDIA_TYPE + ” = ?”, arrayOf(“${MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE}”), null) 2번타입 – 이미지 콘텐츠 Uri  contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null 더보기…

글쓴이 Charlezz,

onLayout() 호출 시 PhotoView의 Matrix 상태가 보존 되지 않는 문제 해결

PhotoView의 문제점 PhotoView 라이브러리를 사용하다보니 레이아웃 변경시 매트릭스 상태가 보존되지 않는 버그가 있었다. 대안으로 SubsamplingScaleImageView 라이브러리는 레이아웃 변경시에도 상태가 유지되는 것을 확인했다.  하지만 난 PhotoView를 쓰고싶다. 문제되는 상황을 살펴보자. 위와 같은 화면을 만들고 있다. 화면을 클릭하면 window의 decorView에 접근하여 System UI를 hide/show 하고 있다. 하지만 decorView의 상태를 변경할 때마다 하위 더보기…

글쓴이 Charlezz,

Groupie로 RecyclerView를 쉽게 만들어보자!

Groupie로 RecyclerView를 쉽게 만들어보자! RecyclerView는 목록으로 구성된 화면을 만들 때 사용하는 아주 유용하고 강력한 위젯이다. RecyclerView는 거의 모든 앱에서 필수로 사용되며, 이를 구현하기 위해 어댑터, 뷰홀더 등과 같은 것들을 구현해야한다. 여러 화면에서 RecyclerView를 사용하는 경우가 많다. 이로 인해 보일러플레이트 코드가 많이 생기다보니 대부분의 개발자들은 추상화 된 코드를 작성하거나 Epoxy와 같은 더보기…