#Grip 9기# 일기_0927 - [안드로이드]이미지 크롭

JH·2022년 9월 27일
0

인턴

목록 보기
10/25
post-thumbnail

인턴을 경험하며 새롭게 배운 내용을 나중에도 알기 쉽게 정리하려고 한다.
미리 했었다면 예전에 했던 코드도 정리를 했을텐데 아쉽다.

오늘은 이미지 크롭에 대해 코딩을 하였다.

현재 진행하고 있는 149번 사업중 직접 촬영한 사진이나 앨범에서 선택한 사진을 모공,번들거림,피부톤 등등을 측정하는 어플인데 현재 구현된 사항으로는 사진을 크기와 상관없이 정사각형의 크기로 압축을 시켜버린다.

그렇게 되면 모공의 크기나 주름의 길이 등등이 같이 압축이 되어버려 측정에 오류가 날 수 있기 때문에 사진의 가운데 부분을 크롭하여 이용하기로 하였다.

또한 기기를 스마트폰에 직접 달아서 촬영을 하는데 장착 위치가 살짝만 틀어져도 가장자리에 어두운 배경이 생기게 되어 이것은 치명적인 오류를 낳게 된다.

public static Bitmap cropCenterBitmap(Bitmap src, int w, int h) {
        if (src == null)
            return null;

        //기본 크기
        int width = src.getWidth();
        int height = src.getHeight();

        //높이, 너비 중 하나의 옵션만 사용할 때
        if (w == -1) w = width;
        if (h == -1) h = height;

        if (width < w && height < h)
            return src;

        int x = 0;
        int y = 0;

        if (width > w) x = (width - w) / 2;

        if (height > h) y = (height - h) / 2;

        int cw = w; // crop width
        int ch = h; // crop height

        if (w > width) cw = width;
        if (h > height) ch = height;

        return Bitmap.createBitmap(src, x, y, cw, ch);//x,y 좌표부터 cw, ch크기의 비트맵을 생성.
    }

코드는 다음과 같다.

기본적으로 높이와 너비를 둘 다 이용하지만 둘 중 하나만 이용하게 될 경우 -1을 사용하면 된다.

결과화면을 보면 위 사진 처럼 압축되었던 것이 아래 사진처럼 가운데만 잘려있는것을 확인할 수 있다.

0개의 댓글