2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신
Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html BufferedImage image = null try {// reads the image image = ImageIO.read(new File(filename)); // prints the image width, height, extension(format) int width = image.getwidth(); int height = image.getheight(); String ext = filename.substring(filename.lastindexof(. ) + 1); System.out.println( filename= + filename); System.out.println( width= + width); System.out.println( height= + height); System.out.println( format= + ext); } catch (IOException e) { e.printstacktrace(); } Command line arguments, method, Scanner 클래스를이용한사용자입력
ImageTest
Lab#2 (ImageConverterTest) Lab#2 는영상 (Image) 파일의저장방식 (file format) 을변환 inputfile, outputfile, format 에따라이미지파일포맷을변환시켜줌 convert 메소드는입력이미지파일명 (inputimagefile), 출력이미지파일명 (outputimagefile), 이미지포맷 (format) 을입력받아서, 이미지파일포멧을변환하는메소드 for/foreach, if/else, switch, constant, while/do-while, Scanner 클래스를이용하여사용자입력받아서 image convert, 기본문법연습
Lab#2 (ImageConverterTest) // converts an image to another format (inputimagefile to outputimagefile with format) public static boolean convert(string inputimagefile, String outputimagefile, String format) { boolean result = false;; BufferedImage image = null; try { // reads input image from file image = ImageIO.read(new File(inputImageFile)); // writes to the output image in specified format result = ImageIO.write(image, format, new File(outputImageFile)); // prints the result if (result) { System.out.println(inputImageFile + " Image converted to " + outputimagefile + " successfully."); } else { System.out.println("Could not convert image."); } } catch (FileNotFoundException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } return result; }
ImageConverterTest inputimagefile outputimagefile format C:/JAVA/IMG1.JPG C:/JAVA/PIC1.png png
Lab#3 (ImageManipulatorTest) Lab#3 는영상 (Image) 파일 5 장을이용해서 print/convert/resize 등각종이미지변환을수행 ImageUtil 클래스는 print, convert, resize, grayscale 메소드제공 ConvertMode는 TO_JPG, TO_PNG, TO_GIF 열거형제공 ImageMode는 PRINT, CONVERT, RESIZE 열거형제공 UserInput 클래스는 getstring, getinteger, getintegerbetween, getimagemode, getconvertmode, getexitkey 메소드제공 ImageManipulatorTest 클래스에서는 print, convert, resize 등각종이미지변환을수행 class, enum, array 사용
ImageManipulatorTest
Lab#4 (ImageProcessorTest) Lab#4 는영상 (Image) 파일 10 장을이용해서 resize/rotate/grayscale 등각종이미지변환을수행 ImageUtil 클래스는 resize, rotate, grayscale, blur, adjust 메소드제공 ConvertMode 는 TO_JPG, TO_PNG, TO_GIF 열거형제공 ImageMode 는 CONVERT, RESIZE, ROTATE, GRAYSCALE, BLUR, BRIGHTNESS_ADJUST 열거형제공 UserInput 클래스는 getstring, getinteger, getintegerbetween, getimagemode, getconvertmode, getexitkey 메소드제공 Photo 클래스는이미지파일을읽어서 BufferedImage로저장 ImageProcessorTest 클래스에서는 Photo 클래스의객체를사용하여 convert, resize, rotate, grayscale, blur, adjust 등각종이미지변환을수행 Photo class 사용
Photo 클래스 이미지정보를가진 Photo 클래스를만든다. Photo 클래스는파일명, 이미지버퍼를멤버로한다. private String fullpath; // 파일명 private BufferedImage img; // 이미지버퍼 그리고메소드는다음을포함한다. public Photo(String fullpath) // 형변환생성자 public Photo(Photo other) // 복사생성자 public void load(string fullpath) // 이미지로딩 public static BufferedImage tocompatibleimage(bufferedimage image) // 하드웨어가속이미지버퍼 get 메소드 // 예 : getfullpath(), getimage(), getwidth(), getheight(), getformat() 등등 public String tostring() // tostring 메소드오버라이드 (override) static 각종유틸리티메소드등
public static void process() {// image process by user input String inputimage = UserInput.getString("Please enter [inputimagefilename]: "); Photo photo = new Photo(inputImage); ImageMode mode = UserInput.getImageMode("Please enter ImageMode [1.CONVERT 2.RESIZE 3.ROTATE 4.GRAYSCALE 5.BLUR 6.BRIGHTNESS_ADJUST]: "); switch (mode) { case CONVERT: ConvertMode cmode = UserInput.getConvertMode("Please enter ConvertMode [1.TO_JPG 2.TO_PNG 3.TO_GIF]: "); convert(photo, cmode); break; case RESIZE: int width = UserInput.getInteger("Please enter scaled width: "); int height = UserInput.getInteger("Please enter scaled height: "); resize(photo, width, height); break; case ROTATE: float angle = UserInput.getFloat("Please enter rotate angle: "); rotate(photo, angle); break; case GRAYSCALE: grayscale(photo); break; case BLUR: blur(photo); break; case BRIGHTNESS_ADJUST: float factor = UserInput.getFloat("Please enter brightness factor: "); adjust(photo, factor); break; } }
ImageProcessorTest
Lab#5 (ImageProcessorTestOOP) Lab#5 는 lab#4 를 OOP 로작성 ConvertMode 는 TO_JPG, TO_PNG, TO_GIF 열거형제공 ImageMode 는 CONVERT, RESIZE, ROTATE, GRAYSCALE, BLUR, BRIGHTNESS_ADJUST, NEGATIVE, EDGE_DETECT 열거형제공 UserInput 클래스는 getstring, getinteger, getintegerbetween, getimagemode, getconvertmode, getexitkey 메소드제공 Photo 클래스는이미지파일을읽어서 BufferedImage로저장 ImageProcessor 클래스를상속받은 ImageBlur, ImageBrightnessAdjust, ImageConvert, ImageEdgeDetect, ImageGrayscale, ImageNegative, ImageResize, ImageRoate 클래스를작성한다. ImageProcessorTestOOP 클래스에서는 ImageBlur, ImageBrightnessAdjust 등클래스를이용하여각종이미지변환을수행 ImageProcessor 클래스, Inheritance 사용 (ImageBlur, ImageBrightnessAdjust, ImageConvert, ImageEdgeDetect, ImageGrayscale, ImageNegative, ImageResize, ImageRotate)
ImageProcessor 클래스 이미지처리를하는 ImageProcessor 추상클래스를만든다. ImageProcessor클래스는 Photo 와 ImageMode를멤버로한다. private Photo photo; // 포토객체 protected ImageMode mode; // 이미지모드 그리고메소드는다음을포함한다. public ImageProcessor(String fullpath) // 이미지파일명으로 Photo 객체생성하는생성자 public ImageProcessor(Photo other) // Photo 객체를받아오는생성자 get 메소드 // 예 : getformat(), getimagemode(), getimg() 등 public abstract BufferedImage getprocessedimg() // 이미지처리된이미지버퍼 public abstract void getadditionaluserinput() // 이미지처리에필요한사용자입력정보
ImageBlur, ImageBrightnessAdjust, ImageConvert, ImageEdgeDetect, ImageGrayscale, ImageNegative, ImageResize, ImageRotate 클래스 ImageProcessor 추상클래스를상속받은각종영상처리클래스를만든다. ImageBlur 클래스는영상을부드럽게희미하게만든다. ImageBrightnessAdjust 클래스는영상의밝기를조절한다. ImageConvert 클래스는영상의포멧을변경한다. ImageEdgeDetect 클래스는영상의경계선검출 (edge detect) 를한다. ImageGrayscale 클래스는흑백영상을만든다. ImageNegative 클래스는반전영상을만든다. ImageResize 클래스는영상의크기를조절한다. ImageRotate 클래스는영상을회전한다. 추상클래스를상속받은클래스는추상메소드를구현해야한다. Public abstract BufferedImage getprocessedimg() // 이미지처리된이미지버퍼 public abstract void getadditionaluserinput() // 이미지처리에필요한사용자입력정보
ImageProcessorTestOOP