레이블이 graphcis인 게시물을 표시합니다. 모든 게시물 표시
레이블이 graphcis인 게시물을 표시합니다. 모든 게시물 표시

2013년 9월 13일 금요일

Java Graphics 객체 추가 정보 및 API 내용 정리

4장.그 래 픽


Graphics 객체

setXORMode() 역할은 무엇인가?
:: Java Doc 설명

setXORMode

public abstract void setXORMode(Color c1)
Sets the paint mode of this graphics context to alternate between this graphics context's current color and the new specified color. This specifies that logical pixel operations are performed in the XOR mode, which alternates pixels between the current color and a specified XOR color.
When drawing operations are performed, pixels which are the current color are changed to the specified color, and vice versa.
Pixels that are of colors other than those two colors are changed in an unpredictable but reversible manner; if the same figure is drawn twice, then all pixels are restored to their original values.
Parameters:
c1 - the XOR alternation color

간다하게 말해서 : 서로 색을 xor 하여 표시 한다.  원래색에 xor를 두번하면 원래색으로 변한다.
예전에 잠시 애니메이션 효과를 위해서 사용되기 함.
- 영어 단어 ::
vice versa - 반대로

-- XXX
update() 함수의 역할은

java.awt.Graphics
:: 자바 API의 대부분의 그래픽 기능을 캡슐화하고 있다.
그래픽 환경 (Graphics context) :: 이것이 정의하는 환경에는 그려질 때의 색상, 텍스트가 표시될 글꼴, 모든 상대적인 좌표들을 나타낼 그림의 원점과 , 영역 밖에는 그려지지 않도록 잘라진 영역들이 포함된다.

상태 변수를 얻기/설정, 선 긋고 , 사각형을 그리고, 사각형을 채우며,

java.awt.ImageObserver
:: 는 image loading process를 모니터하는 역할을 하는데 이미지를 로딩하는 thread는 새로운 data가 도착하면 ImageObserver에게 알리게 된다. Component 클래스는 ImageObserver 인터페이스를 구현하기 때문에 paint()라는 메소드를 호출하게 되면 이미 해당 Component의 paint()를 override를 해서 쓰고 있는 것이기 때이다. 따라서 drawImage를 호출할 때 마지막 인자로 this를 넘겨주는 것이 안전하다

Caption : 자막, slightly : 약간 , render : 표현하다 , crosshair = 십자선
java.awt.SystemColor
:: natvie GUI 객체의 색을 상징적으로 요약(캡슐)화 하여 정의 클래스 이다.

Double-Buffering & Clipping
:: 부드러운 애니메이션을 위한 중요한 기법
더블버퍼링 기법은 모든 그림을 Off-screen(버퍼)에 그리고(drawing) 하고, 버퍼의 내용을 실제 on-screen에 한꺼번에 복사하는 것. (즉 메모리에서 그림을 그리고 그내용을 이미지 처럼 한번에 복사한다는 내용이다.)
off-screen(buffer)에 해당하는 하는 것은 java.awt.Image 객체이다. Component.createImage() Method를 사용하여 생성한다.
~~ 이것은 사용하는 이유 : on-screen 표시가 각각의 프레임마다 완전히 갱신되기 때문에
** repaint() 호출시 :: update() 호출후 paint() 호출한다. update()의 기본 구현은 화면 전체를 지우는 역할을 수행한다.
클리핑 영역은 Graphics의 repaint() 함수에 크기를 설정하여 다시는 그리는 방법이다.
** 그러나 현재 그다지 큰 효과가 없고 메모리나 cpu를 더 사용하는 것 같다.
즉 애플릿을 전체를 다시는 그리는 것이 별 문제가 없으며 현재 시험 코드로는 다시는 그리는 것이 빠름.

java.awt.MediaTracker
:: 이미지를 로딩을 도와주는 도구 클래스 이다.

Image Handling...
  • Scaling : 확대, 축소
  • Cropping : 잘라내기
  • Flipping : 뒤집기

java -Dkey=value
  • -D 속성을 통해서 추가 속성을 정의 할 수 있으며 또한 System.getProperty(“key”);를 통해서 읽을 수 있다.

  • 객체를 생성하는 다른 방법 Class.newInstance()를 사용하는 방법
  • java.lang.Error의 서브 클래스인 경우는 일반적으로 동적 탑재나 메모리 부족과 같은 가상 머신문제를 나타낸다. 이 종류의 예외는 거의 모든 경우에 있어서 복구가 불가능으로 간주되며 캐치되지 않아야 한다.
아래와 같은 구문도 가능한다.
try{
}finally{
}
//catch 구문은 0 개 이상 추가 될 수 있다.

정적 초기화 구문의 일반적인 용도는
natvie 메소드의 로딩 즉 System.load()나 System.loadLibrary() 하는 용도 주로 사용한다.
static{}

어떤 클래스가 final로 선언되었다면 상속을 생성할 수 없다.

2013년 9월 12일 목요일

Java Graphic Programming (2D API)

Graphic Programming

1. Graphics 클래스

⑴ Graphics 객체
  • AWT 컴포넌트 위에 그림을 그리는 데 필요한 정보를 유지하고, 다양한 그리기 메소드를 제공하는 클래스 이다.
  • 실제 컴포넌트에 그림을 그리기 위해서는 먼저 Graphics 객체 인스턴스를 얻어야 한다.
- Graphics 객체에 접근하는 방법
  1. ①  paint(),update()등의 메소드를 사용
  2. ②  컴포넌트의 getGraphics() 메소드를 호출하는 방법
    • 반환값으로 넘겨 받는 Graphics 객체는 기본 Graphics 객체의 복사본이기 때문에 사용한 다음에 프로그래머가 해지해줘야 한다.(리소스 손실 방지) :
      dispose()를 사용해서 리소스를 해지 해야 한다.(but paint()에서처럼 시스템이 인자로 넘겨준 그래픽개체는 해지 하면 않된다)
- Graphics 객체에 대한 자세한 설명
실제 원도우 시스템의 그래픽에 관련된 제어를 행하는 그래픽 컨텍스트(마이크로 원도우에서는 디바이스 컨텍스트라고도 한다.)라는 시스템 리소스를 자바에서 접근, 제어 할 수 있는 객체이다.


전급하고 제어 할 수 있는 속성.
  • 그림을 그릴 때 사용할 색깔.
  • 텍스트를 그릴 때 사용할 글꼴.
  • 클리핑 사각형
  • 그래픽 모드(Java XOR모드, Paint 모드)
  • 그리기에 사용할 좌표의 원점.
-XOR mode 와 Paint mode
관련 메소드 Graphics 의 setPaintMode()
  • Paint mode: 새로운 그림을 그리면 바탕의 그림을 무시하고 덮어 쓰는 방식.(기본 모드)
  • XOR mode : 현재 그리기 새과 그려질 점이 가지고 있던 색 간에 비트 단위의 XOR 연산을 통해 색을 결정한다는 것
    ==> 두 번 XOR mode로 동일한 위치에 도형을 그리면 이전 상태로 돌아간다는 것.


2. paint() method와 깜빡임 줄이기

⑴ paint() 메소드와 클립 영역
paint() method :
  1. 정의
    자바의 AWT 시스템이 컴포넌트가 다시 그려져야 할 필요가 있을 때  자동으로 호출되는 메소드이다.
    (정확히는 AWT 이벤트중 PaintEvent 가 발생하면 paint() 메소드가 호출됨.)
    • PaintEvent는 다른 AWT event와 달리 event 처리 객체를 등록하는 방식으로는 사용될 수 없고
      paint() 메소드가 호출됨으로써 이벤트가 발생한다.
  2. 하는일
    컴포넌트별로 Graphics 컨텍스트가 유지하고 있는 어떤 영역에 다시 칠을 하는 일이다.
    • Clipping Area : 그래픽 컨텍스트가 유지하고 있는 영역 (MS Window에서는 Invalid Area or Invalid Rectangle) MS Window에서는 항상 사각형을 유지 한다.
      자바나 UNIX의 X - Window에서는 사각형의 배열 or  최소 사각형으로 나타남.
  3. paint() method가 호출되는 경우
    • 원도우가 처음 만들어 질 때  원도우를 처음 그리기 위해. --> 클립영역 : 원도우 전체
    • 원도우의 크기가 변경되었을 때 --> 클립영역 : 원도우 전체
    • 원도우가 아이콘화 될 때  --> 클립영역 : 원도우 전체(시스템마다 조금씩 차이가 남)
    • 원도우의 일부 or 전부가 다른 원도우에 의해서 가려졌다가 다시 보일 때
      --> 클립영역 : 최소사각형(가린부분)or 사각형의 배열
    • 사용자가 repaint() method를 호출할 때.  인자가 없는 repaint()메소드는 원도우 전체를 클립 영역으로 한다.                인자사용해서 클립 사각형을 지정할 수 있다.


    • paint() 메소드가 호출되어 실제로 paint() method는 원도우 전체에 대해서 동작을 하지만 화면이 갱신 되는             부분은 클립 영역 뿐이다.


    • update() --> repaint()를 호출함에 따라 AWT system에 의해 호출된다.


    • Component Class 의 update() 메소드의 역할
      1. 먼저 배경색으로 컴포넌트를 칠함으로써 컴포넌트의 내용을 지운다.
      2. 현재 이 컴포넌트의 전경색으로 그래픽 컨텍스트의 현재 색을 지정한다.
      3. 컴포넌트를 다시 그리도록 컴포넌트의 paint()메소드를 호출한다.