프로젝트

자바로 만드는 배경화면 이미지 편집기 / java / imageIO / blur / 밝기조정 / 블러 /

페이지 정보

작성자 메카 작성일17-01-16 09:58 조회3,991회 댓글0건

본문


  


배경화면 편집 프로젝트



안녕하세요 메카솔루션입니다.


이번에는 자바를 이용해서 배경화면의 이미지를 수정하는 프로그램을 만들어보고자 합니다.


 

요즘 사용하는 모니터가 와이드 스크린이어서 뭘 배경화면으로 해도 빈자리가 많이 남아 불편한 느낌이 많았습니다.


빈 공간을 어떻게 해야 하나 고민을 하다가


 

눌러도 재생 안돼요..


페이스북에서는 세로로 촬영된 영상의 경우 빈 공간이 기본 영상으로 채우고 블러 처리를 하여서 빈 공간을 없앤 것을 보고 바탕화면도 똑같이 시도해 보면 좋겠다고 생각했습니다.


https://github.com/keepworking/JavaBackgroundBlurFilter <- 깃헙 레포지터리 바로 가기


평소와 같이 선 코드 후 설명으로 진행하겠습니다.


코드에도 주석으로 짧게 설명이 되어있으므로 보고 읽어주셔도 좋습니다.


참고로 이미지를 블러 처리하는 강좌를 이전에 한번 업로드한 적이 있었습니다.


다만, 해당 예제에서는 블러 방식이 조금 다릅니다.


http://blog.naver.com/roboholic84/220907459028 <- 자바 이미지 블러 처리 강좌



소스코드 확인해보기




화면 해상도 가져오기



어차피 바탕화면의 배경으로 사용할 이미지입니다. 모니터의 크기보다 클필요도없고, 작으면도 안됩니다.


그렇다면 모니터의 크기에 맞는 이미지를 만들어야합니다.


 

이런식으로 배경 화면 사이즈에 맞는 이미지를만들 수 있습니다.



이미지를 사이즈에 맞게 배치하는 부분은 굳이 설명할 필요가 없으니 링크의 코드를 확인하면 좋습니다.



이미지 블러 처리하기


블러 처리에 대해서는 java에서 쉽게 필터를 적용할 수 있는 ConvolveOp라는 객체가 있으나 이의 경우, 가장자리 부분이 제외돼서 블러 처리되기 때문에 이용하지 않았습니다. 


아쉽게도;;


때문에 블러 처리를 위해 이미지의 픽셀 하나하나를 for 문으로 돌면서 처리를 하였는데 각 픽셀의 색상을 선택하는 알고리즘은 다음과 같습니다.


Color here = null;

long r = 0;

long g = 0;

long b = 0;

int count = 0;

for (int i = 0; i < x_; i++) {

for (int j = 0; j < y_; j++) {

try {

Color color = new Color(input.getRGB(x - (x_ / 2) + i, y - (y_ / 2) + j));

r += color.getRed();

g += color.getGreen();

b += color.getBlue();

count++;

} catch (IndexOutOfBoundsException e) {

//가장자리는 블러 범위에 들가지 않는 부분도 있으니 범위를 넘는 에러가 발생함

}

}

}

r /= count;

g /= count;

b /= count;

here = new Color((int) r, (int) g, (int) b);

output.setRGB(x, y, here.getRGB());


각 픽셀의 안에서 입력된 블러 크기만큼 주위 픽셀들의 색상 값을 더한 다음 주위 픽셀수만큼 나누어주는 방식으로 보면 됩니다.


발기를 조정하는 경우 ConvolveOp 객체를 다시 사용하였습니다.


가장자리를 읽지 않는 이유는 마스크의 크기가 가장자리를 넘을 수 없기 때문인데, 


마스크의 크기가 1x1이라면 가장자리도 모두 읽고 동작을 하기 때문입니다.


// 밝기 조정 시작

Kernel kernel = new Kernel(1, 1, new float[] { 1.2f });
ConvolveOp convolveOp = new ConvolveOp(kernel);
bgImg = convolveOp.filter(bgImg, null);
  
//밝기 조정 끝


이런 식으로 밝기가 조정할 수 있습니다.


사실 블러 처리를 할 때 밝기도 함께 올릴 수 있는데 


각 함수를 나누어야 나중에 재사용이 가능하지 싶네요;;


moon_and_james-14 


 


그리하여 이런 식으로 결과물이 완성되었습니다.


밋밋한 감이 사라져서 저는 대만족이네요;;


나중 에는 배경화면 폴더 안의 이미지를 자동으로 수정하도록 하는 것을 목표로 기능을 추가해보겠습니다.


감사합니다.


출처 : mechasolution.com


댓글목록

등록된 댓글이 없습니다.


모바일 버전으로 보기