자바의 ASCII 아트

1. 개요

이 기사에서는 언어의 2D 그래픽 지원 개념을 사용하여 Java에서 ASCII 문자 또는 문자열 의 그래픽 인쇄를 만드는 방법에 대해 설명합니다 .

2. 2D 그래픽으로 문자열 그리기

Graphics2D 클래스 의 도움으로 String 을 이미지로 그릴 수 있으며 drawString () 메서드를 호출 할 수 있습니다.

Graphics2D 는 추상적 이기 때문에 인스턴스를 확장하고 Graphics 클래스 와 관련된 다양한 메서드를 구현하여 인스턴스를 만들 수 있습니다 .

이것은 지루한 작업이지만 Java에서 BufferedImage 인스턴스를 만들고 기본 Graphics 인스턴스를 검색하여 수행하는 경우가 많습니다 .

BufferedImage bufferedImage = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB); Graphics graphics = bufferedImage.getGraphics();

2.1. 이미지 매트릭스 인덱스를 ASCII 문자로 바꾸기

그릴 때 문자열을 의 Graphics2D 클래스 설계 개척 영역 단순 매트릭스 형 기술을 사용하여 문자열을 다른 0 차 값을 부여하면서 특정 값을 할당한다.

조각 된 영역을 원하는 ASCII 문자로 대체 할 수 있으려면 조각 된 영역의 값을 RGB 색상 값이 아닌 단일 데이터 포인트 (예 : 정수)로 감지해야합니다.

이미지의 RGB 색상을 정수로 나타 내기 위해 이미지 유형을 정수 모드로 설정합니다.

BufferedImage bufferedImage = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB);

기본 아이디어는 이미지 매트릭스의 0이 아닌 인덱스에 할당 된 값을 원하는 예술적 특성으로 바꾸는 것입니다.

0 값을 나타내는 행렬의 인덱스에는 단일 공백 ​​문자가 할당됩니다. 정수 모드에 해당하는 0은 -16777216입니다.

3. ASCII 아트 생성기

“BAELDUNG”문자열의 ASCII 아트를 만들어야하는 경우를 고려해 보겠습니다.

섹션 2.1에서 언급했듯이 원하는 너비 / 높이와 이미지 유형이 정수 모드로 설정된 빈 이미지를 만드는 것으로 시작합니다.

Java에서 2D 그래픽의 고급 렌더링 옵션을 사용할 수 있도록 Graphics 객체를 Graphics2D 인스턴스 로 캐스팅 합니다 . 그런 다음 "BAELDUNG" 문자열로 drawString () 메서드를 호출하기 전에 원하는 렌더링 매개 변수를 설정합니다 .

Graphics2D graphics2D = (Graphics2D) graphics; graphics2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); graphics2D.drawString("BAELDUNG", 12, 24);

위의 12와 24는 각각 텍스트 인쇄가 시작되어야하는 이미지상의 지점에 대한 x 및 y 좌표를 나타냅니다.

이제 기본 행렬에 두 가지 유형의 구별 된 값이 포함 된 2D 그래픽이 있습니다. 0이 아닌 인덱스.

그러나 개념을 이해하기 위해 2 차원 배열 (또는 행렬)을 살펴보고 모든 값을 다음과 같이 ASCII 문자 "*"로 바꿉니다.

for (int y = 0; y < settings.height; y++) { StringBuilder stringBuilder = new StringBuilder(); for (int x = 0; x < settings.width; x++) { stringBuilder.append("*"); } if (stringBuilder.toString().trim().isEmpty()) { continue; } System.out.println(stringBuilder); }

위의 출력은 아래와 같이 별표 (*) 블록 만 표시합니다.

-16777216과 같은 정수 값만 "*"로, 나머지는 "*"로 대체하여 "*"로 대체를 구별하는 경우 :

for (int y = 0; y < settings.height; y++) { StringBuilder stringBuilder = new StringBuilder(); for (int x = 0; x < settings.width; x++) { stringBuilder.append(image.getRGB(x, y) == -16777216 ? "*" : " "); } if (stringBuilder.toString().trim().isEmpty()) { continue; } System.out.println(stringBuilder); }

우리는 문자열“BAELDUNG”에 해당하는 다른 ASCII 아트를 얻지 만 다음과 같이 뒤집힌 조각으로 만듭니다.

마지막으로 -16777216과 같은 정수 값을””로 바꾸고 나머지는“*”로 대체하여 식별을 반전합니다.

for (int y = 0; y < settings.height; y++) { StringBuilder stringBuilder = new StringBuilder(); for (int x = 0; x < settings.width; x++) { stringBuilder.append(image.getRGB(x, y) == -16777216 ? " " : "*"); } if (stringBuilder.toString().trim().isEmpty()) { continue; } System.out.println(stringBuilder); }

이것은 원하는 문자열 의 ASCII 아트를 제공합니다 .

4. 결론

이 빠른 자습서에서는 내장 2D 그래픽 라이브러리를 사용하여 Java에서 ASCII 아트를 만드는 방법을 살펴 보았습니다.

우리가 텍스트를 위해 특별히 보여 주었지만; Github의 소스 코드 인“BAELDUNG”은 모든 문자열 을 받아들이는 유틸리티 기능을 제공합니다 .

항상 그렇듯이 소스 코드는 GitHub에서 찾을 수 있습니다.