Java

JavaTM 2 SDK, v1. 4 에서의
Java 2DTM 의 신기능

2 D 목차

bullet 새로운 파이프라인 아키텍쳐(architecture) bullet 오프 스크린 이미지의 하드웨어 고속화
bullet 플러그 인 가능한 이미지 입출력 시스템 bullet 새로운 Java Print Service API
bullet 추가의 이미지 형식의 지원 bullet Public BIDI 알고리즘
bullet TrueType 힌트용 폰트 래스터라이저의 지원 bullet 힌트 정보를 포함한 Lucida 폰트
bullet OpenType 폰트 테이블의 지원 bullet 수치 형상의 지원
bullet 복잡한 텍스트 레이아웃의 지원 개선 bullet Porter-Duff 의 완전한 지원
bullet 폰트의 변환 속성을 체크하는 기능 bullet FontRenderContext 의 동일성 메소드

새로운 파이프라인 아키텍쳐(architecture)

이 변경에 관련하는 버그 추적 리포트:4228939 4268962

Java 2 SDK 버젼 1.2 및 1.3 에서는,Graphics 객체에 대한 일반 조작에 의해,Graphics 객체의 캐쉬된 draw 데이터가 무효가 되는 것이 빈번하게 있었습니다. 이 때문에,Graphics 객체의 draw 정보가 연속해 재작성되어create(),setColor(), 및 translate() 등, 단순해 일반적으로은 문제의 발생하지 않는 조작이어도, draw 처리가 중단되었습니다. Swing 계층의 draw는 이러한 일반 조작에 크게 의존하고 있기 (위해)때문에, draw 데이터의 무효화 및 재작성에 의해, 많은 Swing 어플리케이션에서는 저퍼포먼스에서의 재draw 밖에 할 수 없었습니다.

새로운 파이프라인 아키텍쳐(architecture)에서는, 다음의 구현 변경에 의해, 퍼포먼스의 오버헤드가 저감 되었습니다.

다음의 호출을 Swing 어플리케이션내에서 빈번하게 사용하는 경우, 상기의 변경의 효과가 특히 현저하게 나타납니다. 코드 공유의 향상에 의해, 실행시의 사이즈도 개선됩니다.

파이프라인 아키텍쳐(architecture)에 관한 그 외의 변경에 의해, 다음의 퍼포먼스가 큰폭으로 개선되었습니다.

이 기능의 상세한 것에 대하여는, 화이트 페이퍼「High Performance Graphics」를 참조해 주세요.

오프 스크린 이미지의 하드웨어 고속화

이 변경에 관련하는 버그 추적 리포트: 4330166

SDK 1.4 는, 오프 스크린 이미지용의 하드웨어 고속화를 제공하기 위해(때문에), 이러한 이미지의 draw 및 카피의 퍼포먼스가 향상합니다. 하드웨어 고속화 처리된 이미지의 문제점은, Win32 등의 플랫폼에 따라서는, 상황에 의해 내용이 돌연 없어지는 경우가 있어, 게다가 어플리케이션으로부터 그것을 제어할 수 없는 것입니다. 새로운 VolatileImage 클래스를 사용하면(자), 하드웨어 고속화 처리된 오프 스크린 이미지를 작성해, 그 이미지의 내용을 관리할 수 있습니다.

신규 API 에는, 이하의 것이 포함됩니다.

VolatileImage API 의 사용 방법의 자세한 것은, 「The VolatileImage API User Guide」 ( PDF )을 참조해 주세요.

플러그 인 가능한 이미지 입출력 시스템

이 변경에 관련하는 버그 추적 리포트: 4101949

JavaTM Image I/O API 는, 다양한 형식 및 프로토콜의 이미지의 읽기 및 기입을 지원하는, 플러그 인 및 확장이 가능한 시스템입니다. 이 API 는, 플러그 인에 의해 기능을 실현하고 있습니다. 플러그 인의 대부분은 서드 파티에 의해 작성되고 있습니다. 주로 구버젼의 Java SDK 와의 호환성을 유지하기 위해서, 최소 세트의 플러그 인을 제공하는 경우에는, 적합 구현만이 필요합니다. 이 API 를 사용하는 어플리케이션에서는, 이미지의 포함 형식 또는 그것을 지원하는 플러그 인의 정보가 없어도, 이미지의 읽기 및 기입을 실행할 수 있습니다.

기본적으로, 모든 이미지 입출력 조작은, 1 개(살) 이상의 이미지, 각 이미지에 관련지을 수 있었던 1 개(살) 이상의 프리뷰 (썸네일) 이미지, 및 픽셀 데이터 이외의 모든 데이터인 메타데이타를 포함한, 스트림의 읽어내 또는 기입으로 구성됩니다.

Java Image I/O API 를 사용하면(자), 어플리케이션으로 다음의 조작이 가능하게 됩니다.

Java Image I/O API 의 상세한 것에 대하여는,「Java Image I/O」를 참조해 주세요.

새로운 JavaTM 인쇄 서비스

이 변경에 관련하는 버그 추적 리포트:
4285177 4360752

이 API 는 JSR006 로 작성된 Unified Printing API 입니다. 이 API 를 사용하는 것으로, 다음의 다양한 인쇄 서비스 기능을 클라이언트 어플리케이션으로부터 이용할 수 있습니다.

모든 기능은 이 API 를 개입시켜 사용하기 위해(때문에), 이 API 를 우선적으로 이용할 수 있는 것은 서버 어플리케이션입니다.

인쇄 서비스에 문서를 spool 하는 기능을, 서버 어플리케이션으로부터 이용할 수 있습니다. 이전에는, 인쇄 작업을 생성하기 위해서 Java 어플리케이션으로부터 사용할 수 있던 것은, 그래픽스 호출만이었습니다.

상세한 것에 대하여는「Java 인쇄 서비스」를 참조해 주세요.

float 및 double 이미지 형식의 지원

이 변경에 관련하는 버그 추적 리포트: 4364491

SDK 1.4 보다 전에서는, Java 2D API 에는, float 또는 double 샘플 형식용의 DataBuffer 서브 클래스가 존재하지 않았습니다. Java Image I/O API 는, float 및 double 이미지 형식의 읽기 및 기입에 이러한 클래스를 필요로 합니다.

float 및 double 이미지 형식을 지원하기 위해(때문에), SDK 1.4 에 DataBufferFloat 및 DataBufferDouble 라고 하는 2 개의 클래스가 추가되었습니다. DataBufferFloat 클래스는, 픽셀의 float 배열을 랩 합니다. DataBufferDouble 클래스는, 픽셀의 double 배열을 랩 합니다.

기존의 ComponentColorModel ComponentSampleModel 클래스 구현도 갱신되어 서명 첨부의 short, float, 및 double 형 데이터가 지원되었습니다. 이러한 클래스에서는, 새롭게 지원된 데이터형에 대응하는, 정규화된 컴퍼넌트치의 범위가 정의되고 있습니다.

ComponentColorModel 클래스가 픽셀 데이터를 클램프 할 것은 없습니다. 어플리케이션은, 적절한 범위에 슬캘링 하는 것이 상정되고 있습니다. ColorSpace 클래스에, 정규화된 최소치 및 최대치를 컴퍼넌트 마다 결정하기 위한 메소드가 추가되었습니다. 알파 성분치는, 정규화된 0.0 ? 1.0 의 범위내에 없으면 안됩니다.

다음에, 추가된 전 API 의 리스트를 나타냅니다.

java.awt.image.ColorModel 에, 기존의 메소드에 대응하는 3 개의 메소드가 새롭게 추가되었습니다.

java.awt.image.ComponentColorModel 에, 신규 데이터형에 근거하는 생성자 , 및 기존의 ColorModel 메소드를 오버라이드(override) 하는 메소드가 새롭게 추가되었습니다. java.awt.image.SampleModel 에, 신규 데이터형의 받아들여에 사용하는 2 개의 메소드가 새롭게 추가되었습니다. java.awt.image.ComponentSampleModel 에, 신규 데이터형의 받아들여에 사용하는 2 개의 메소드가 새롭게 추가되었습니다. java.awt.image.BandedSampleModel 에서는, 신규 데이터형에 대응하기 위해(때문에), 3 개의 메소드가 편집되었습니다. java.awt.color.ColorSpace 에, 컴퍼넌트 마다 정규화된 최소치 및 최대치를 결정하기 위한 2 개의 메소드가 새롭게 추가되었습니다. java.awt.color.ICC_ColorSpace 에, 2 개의 신규 ColorSpace 메소드를 오버라이드(override) 하는 메소드가 새롭게 추가되었습니다.

Public BIDI 알고리즘

이 변경에 관련하는 버그 추적 리포트: 4285083

Unicode 쌍방향 알고리즘은, Unicode 문자 프로퍼티을 사용해 텍스트를 분석해, 텍스트의 방향을 판별합니다. 이 알고리즘은, 헤브라이어나 아라비아어등의 쌍방향 텍스트를 올바를 방향으로 표시하기 위해서 필요합니다.

현행의 구현은 모두 Java 언어로 기술되고 있습니다만, SDK 1.4 에서는 네이티브의 폰트 코드로부터 효율적인 액세스가 가능하게 되기 (위해)때문에, 헤브라이어나 아라비아어를 보다 효율적으로 draw 할 수 있게 됩니다. SDK 1.4 에서는, Java Native Interface 를 사용해 native code에 액세스 할 수 있습니다.

새로운 public BIDI 클래스는, Unicode 3.0 BIDI 알고리즘을 구현해, 텍스트의 쌍방향 늘어놓고 바꾸어에 관한 정보에의 액세스를 제공합니다. 이 때문에, 혼재하고 있는 쌍방향 텍스트가 올바르게 표시됩니다.

샘플의 BidiSample 에는,BIDI 루틴의 몇개인가가 나타나고 있습니다.

TrueType 힌트용 폰트 래스터라이저의 지원

이 릴리스보다 전은, Java 2D 가 사용하는 T2K 폰트 래스터라이저는, TrueType 폰트용의 폰트 힌트 기능을 지원하고 있었었습니다. 이 때문에, TrueType 폰트의 표시는, 항상 일관한 아름다운 것으로는 없었습니다. 이 릴리스에서는, TrueType 폰트내에 포함된 힌트를 사용하도록(듯이) T2K 가 수정되고 있습니다.

T2K 래스터라이저에 이 기능을 추가하는 것으로써, 네이티브 래스터라이저에의 의존도가 큰폭으로 저하했습니다. 네이티브 래스터라이저에의 의존도 저하에는, 다음과 같은 메리트가 있습니다.

힌트 정보를 포함한 Lucida 폰트

이 변경에 관련하는 버그 추적 리포트: 4285089

SDK 1.4 에서는, Java 2 SDK 내의 Lucida 폰트에 힌트 정보가 포함되게 되었습니다. 이 때문에, Java 2 SDK 로 기존의 폰트의 대용으로서 또는 다른 폰트를 이용할 수 없는 경우에 사용되는 폰트의 품질이 향상했습니다. Lucida 폰트에 힌트 정보를 추가하는 것으로써, 새로운 크로스 플랫폼 래스터라이저가, SDK 의 Lucida 폰트내의 힌트를 사용하는 일도 가능하게 되었습니다. 이 때문에, Lucida 폰트가 보다 일관해 아름답게 표시되게 됩니다.

OpenType 폰트 테이블의 지원

이 변경에 관련하는 버그 추적 리포트: 4285161

SDK 1.4 에, 일반적인 OpenType 폰트 지원를 제공하는 아키텍쳐(architecture)가 새롭게 포함되게 되었습니다. 이 새로운 아키텍쳐(architecture)는, 타이어, 인도어파, 아라비아어, 헤브라이어등의 필기체 활자에 대응한, 국제적인 문자 지원를 제공합니다. 또, 로마자 언어의 확장 입력 지원도 제공합니다.

수치 형상의 지원

이 변경에 관련하는 버그 추적 리포트: 4210199

현재로서는, 아라비아어의 텍스트로 둘러싸인 수치를 Java 2D 로 draw 하면(자), 수치가 대부분의 서구 제국에서 일반적으로 사용되고 있는 아라비아 숫자 (로마 숫자)의 형상이 됩니다. 그러나, 힌디어 로케일에서는, 힌디어의 형상으로 표시되는 것이 기대됩니다.

신규 속성 TextAttribute.NUMERIC_SHAPING , 및 신규 클래스 NumericShaper 를 사용하면(자), ASCII 숫자를 다른 Unicode 10 진수의 형상으로 변경할 수 있습니다.

예를 들어,TextLayout 인스턴스로, 숫자를 유럽 언어로부터 아라비아어로 변환하는 경우, 다음의 조작을 실행합니다.

  1. ARABIC 숫자의 형상을 가지는 NumericShaper 를 작성한다
          Numeric Shaper nS 
      	 = NumericShaper.getContextualShaper(NumericShaper.ARABIC)
    
  2. 키치 TextAttribute.NUMERIC_SHAPING 를 사용해,NumericShaperMap 속성에 추가한다
          Map map = new HashMap();
          map.put(TextAttribute.NUMERIC_SHAPING, nS);
    
  3. Map 속성을 사용해 TextLayout 를 작성한다
          FontRenderContext frc = ...;
          TextLayout layout = new TextLayout(text, map, frc);
    
  4. 텍스트를 draw 한다
          layout.draw(g2d, x, y);
    

NumericShaper 클래스에는, 종류가 다른 Unicode 10 진수를 나타내는 정수가 19 개 있습니다. 이 때문에, 데이 배너 개리 문자나 타이어 문자를 포함한 19 가 다른 형상에 숫자를 변환할 수 있습니다.

GlyphVector 에서의 복잡한 레이아웃의 지원 개선

이 릴리스보다 전에는, 클라이언트는, Glyph로부터 문자에의 매핑 정보에 GlyphVector 로부터 액세스 할 수 없었습니다. 이 정보는, 클라이언트가 GlyphVector 내의 Glyph가 어느 문자에 대응하는지를 확인하기 위해서 사용합니다. 이 릴리스에서는,GlyphVectorGlyphVector 내의 각 Glyph의 정확한 경계를 취득하는 신규 메소드도 정의되고 있습니다.

주:클라이언트는 GlyphVector 및 Glyph로부터 문자에의 매핑 정보를 사용해 선택 및 맞아 판정을 구현할 수 있습니다만, 대부분의 클라이언트에서는, TextLayout 및 Swing 의 JTextArea 나 JTextField 를 사용하는 (분)편이 편리하고 유용합니다.

SDK 1.4 에서는, 다음의 GlyphVector 메소드가 새롭게 추가되었습니다.

다음의 신규 GlyphMetrics 메소드는, 변환 끝난 폰트에 대해서 조작을 실시합니다. Porter-Duff 의 완전한 지원

이 변경에 관련하는 버그 추적 리포트: 4380232

AlphaComposite 클래스는, Porter 및 Duff 에 의해 확립된 모드 또는 규칙에 따라, 알파 브렌드 기능을 제공합니다. SDK 버젼 1.3 의 AlphaComposite API 로 정의 및 구현되고 있는 규칙은, Porter 와 Duff 가 발견한 12 의 규칙 가운데 8 개에 지나지 않습니다.

SDK 1.4 에서는,AlphaComposite 는 나머지의 4 개의 Porter-Duff 규칙을 구현합니다.

폰트의 변환 속성을 체크하는 기능

이 변경에 관련하는 버그 추적 리포트: 4314043

SDK 1.2 이후,Font 객체가 보관 유지하는 변환 속성에는,Font.getTransform 메소드를 사용해 액세스 할 수 있습니다. 변환 속성을 설정하는 것으로써,Font 의 회전, 변형등의 기하학적 변환을 실행할 수 있습니다. 다만, 대부분의 어플리케이션에서는, 변환은 아니고 Size 속성을 사용해 문자의 사이즈나 형상을 제어합니다. 이 경우, 변환은 단순한 항등변환이 됩니다.

현재, 변환이 항등변환인가 어떤가를 판별하는 유일한 방법은,getTransform 를 호출해, 반환되는 AffineTransform 를 조사하는 것입니다. 그러나,getTransform 를 호출하려면 ,Font 객체가 AffineTransform 의 클론을 작성하는 것이 요구됩니다. 이것은, 변환이 가변이기 (위해)때문에입니다.

SDK 1.4 로 새롭게 추가된, 다음의 2 개의 메소드를 이용하면(자),AffineTransform 를 새롭게 작성하지 않아도,Font 객체의 변환이 항등변환인가 어떤가를 체크할 수 있습니다.

FontRenderContext 의 동일성 메소드

이 변경에 관련하는 버그 추적 리포트: 4328579

FontRenderContext 객체는, 그래픽스 문맥 상태를 캡슐화해,GlyphVectorTextLayout 에 의해 사용됩니다. FontRenderContext 에 새롭게 추가된 다음의 3 개의 메소드를 이용하면(자),GlyphVector 내의 FontRenderContext 를,GlyphVector 의 draw처 그래픽스 문맥내의 FontRenderContext 와 비교할 수 있습니다.

이러한 동일성 메소드를 이용하면(자), 일치 검사를 실행하기 위해서 클라이언트가 AffineTransform 을 작성할 필요가 없기 때문에, 퍼포먼스상의 이점도 있습니다.

* 이 Web 사이트에서 사용되고 있는 용어 「Java 가상 머신」또는 「JVM」는, Java 플랫폼용의 가상 머신을 나타냅니다.


Copyright © 1995-2001 Sun Microsystems, Inc. All Rights Reserved.

코멘트의 송부처:
 Sun Microsystems, Inc
Java Software