Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- python
- react-native
- 티스토리챌린지
- 오블완
- TypeScript
- spring boots
- 개발
- 백준
- chrome
- 파이썬
- AWS
- css
- EC2
- Next
- Jenkins
- nginx
- JavaScript
- Android
- 코딩테스트
- it
- nuxt
- React
- kotlin
- 코테
- NanoHttpd
- 광고 id
- 오퍼월
- docker
- Express
- toml
Archives
- Today
- Total
내맘대로 개발일지
[Kotlin] ByteArray -> Bitmap Image Resize 본문

📱테스트 환경
Samsung Galaxy Android 13 • Android 10
😢 내가 겪은 문제
DB에 저장되어있는 이미지를 가져와서 ImageView 에 넣고 wrap_content / wrap_content 해주고 크기를 봤는데 ...
너무 처참하게 작아서 잘 안보였다 .. 그래서 reSize 를 해주고싶었는데 잘 안됐다 .. 검색해서 이것저것 찾아봤는데
내 얇디얇은 지식으로는 이해하기 쉽지 않았다 ...!! 그래서 열심히 뒤져서 결국 해냈는데 해당 코드를 기록해 놓고 싶었다 : )
먼저 ByteArray Type 으로 넘어온 이미지를 Bitmap 형식으로 변환해주었다. 그래야 ImageView 에 넣어줄 수 있다 !!
val imageBitmap = BitmapFactory.decodeByteArray(imageByteArray, 0, imageByteArray.size)
이런 다음에 이제 Bitmap 을 ImageView 에 넣어주면 화면에 이미지를 확인할 수 있다.
원하는 넓이와 높이를 적어주면 해당 뷰에 원하는 크기로 이미지를 조정하여 볼 수있다.
val imageView = findViewById<ImageView>(R.id.ImageView)
imageView.setImageBitmap(Bitmap.createScaledBitmap(imageBitmap, 원하는 넓이, 원하는 높이, false))
하지만, 내가 원하는건 넓이는 화면 전체 크기에 맞추고, 높이는 비율에 맞게 조절하고싶었다.
해서 열심히 계산을 돌려서 넓이는 부모의 넓이, 높이는 비율에 맞게 커지되, 최대높이에서 130dp 를 뺀 만큼 커지게 변경하였다.
최종 코드는 이렇다 : )
val pullScreen = findViewById<ConstraintLayout>(R.id.pullScreen)
val imageView = findViewById<ImageView>(R.id.ImageView)
// 부모 뷰의 너비와 높이 가져오기
val parentWidth: Int = pullScreen.width
val parentHeight: Int = pullScreen.height
// 이미지의 원래 너비와 높이 가져오기
val originalWidth = imageBitmap.width
val originalHeight = imageBitmap.height
// 비율 계산
val aspectRatio = originalWidth.toFloat() / originalHeight
// 새로운 높이와 너비 계산
val newWidth = parentWidth
var newHeight = Math.round(parentWidth / aspectRatio)
// 최대 높이 제한
val maxHeightPixels = pullScreen.height - TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 130f, resources.displayMetrics).toInt()
if (newHeight > maxHeightPixels) {
newHeight = maxHeightPixels
}
imageView.setImageBitmap(Bitmap.createScaledBitmap(imageBitmap, newWidth, newHeight, false))
이렇게 해서 DB 에서 가져온 ByteArray 를 Bitmap 으로 변경하고, 비율에 맞게 내가 원하는 형태로 변경하여 이미지를 보여주었다.
첨엔 정말 간단하게 해결할 수 있을 것 같았는데, 생각보다 시간이 걸린 걸 봐서는 더 열심히 공부해야겠다 .... :(
'Android > Kotlin' 카테고리의 다른 글
| [Kotlin] intent.() vs intent. setFlags() 차이점 (0) | 2023.08.10 |
|---|---|
| [Kotlin] MAC .apk • .aab Build (0) | 2023.08.10 |
| [Kotlin] This view is not constrained vertically: at runtime it will jump to the top unless you add a vertical constraint (0) | 2023.08.09 |
| [Kotlin] Activity 간에 데이터 주고받는 방법 (0) | 2023.08.09 |
| [Kotlin] 앱 알림 보내기 (0) | 2023.08.09 |