스니펫:포스터 효과 내기

위클립스
이동: 둘러보기, 찾기
스니펫 분류
스니펫 (3)
스니펫/JDT (1)
스니펫/PDE (3)
스니펫/SWT (7)

[편집] 결과

Posterize.png

[편집] 소스

import java.io.IOException;
import java.net.URL;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
 
public class BlackAndWhite {
   public static void main(String[] args) throws IOException {
      URL url = new URL("http://eclipse.or.kr/images/thumb/0/01/Jeeeyul.jpg/200px-Jeeeyul.jpg");
      ImageLoader loader = new ImageLoader();
      ImageData originalData = loader.load(url.openStream())[0];
      ImageData bwData = new ImageData(originalData.width, originalData.height, 24, originalData.palette);
 
      PaletteData palette = bwData.palette;
      for (int x = 0; x < bwData.width; x++) {
         for (int y = 0; y < bwData.height; y++) {
            int pixel = originalData.getPixel(x, y);
            RGB rgb = palette.getRGB(pixel);
            float[] hsb = rgb.getHSB();
 
            // 포스터 효과를 내기 위해 사용가능한 색조를 10개로 줄임.
            hsb[0] = ((int) (hsb[0] / (36))) * 36;
 
            // 포스터 컬러의 느낌을 주기 위해 색조를 통일 시키고, 무채색에도 강제로 색조를 부여해 강렬한 느낌을 만듬.
            hsb[1] = .6f;
 
            // 밝기가 0.37미안이면 완전히 검게, 그 이상이면 완전히 밝게 그려 대비 효과를 냄
            if (hsb[2] > 0.37f) {
               hsb[2] = 1f;
            } else {
               hsb[2] = 0f;
            }
 
            bwData.setPixel(x, y, palette.getPixel(new RGB(hsb[0], hsb[1], hsb[2])));
         }
      }
 
      Display display = Display.getDefault();
      Image originalImage = new Image(Display.getDefault(), originalData);
      Image bwImage = new Image(Display.getDefault(), bwData);
 
      Shell shell = new Shell(display);
      shell.setLayout(new FillLayout());
      new Label(shell, SWT.NORMAL).setImage(originalImage);
      new Label(shell, SWT.NORMAL).setImage(bwImage);
      shell.pack();
      shell.open();
 
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) {
            display.sleep();
         }
      }
 
      bwImage.dispose();
      display.dispose();
   }
}
개인 도구
이름공간
변수
행위
포탈
탐색
도움
도구모음