目次
Java 2D レンダリング
例 #5
結論
ホームページ Java &#&チュートリアル Java での 2D グラフィックス

Java での 2D グラフィックス

Aug 30, 2024 pm 04:06 PM
java

2D グラフィックスは、Java 2 プラットフォームのいくつかの高度な機能を利用した Java プログラミングを使用して実現できます。これには、画像処理、高度なグラフィック設計オプション、幾何学的変換、アルファ合成などの操作のための Java の組み込み関数が含まれます。 Java 2D パッケージの下には、awt、awt.image、awt.color、awt.font、awt.geom、awt.print、awt.image.renderable などの多数のパッケージが提供されています。 Java は、その高品質なグラフィック結果、多種多様な幾何学的設計オプションによりドキュメントの印刷が容易になり、開発された製品のパフォーマンスを維持できるため、ゲーム開発者コミュニティの間で有名な goto オプションです。

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

Java 2D レンダリング

Java 2D API は、ディスプレイ モニターやプリンターなど、さまざまなデバイスすべてにわたって均一なレンダリング モデルをサポートします。プログラムの開発中、レンダリングは、最終コンポーネントがプリンタであるかディスプレイ モニタであるかに関係なく、同じように機能します。パッケージは、終了コンポーネントに基づいてグラフィックス コンテキストを自動的に検出し、変更します。 Java 2D API は、強化されたグラフィックスおよびレンダリング機能のサポートを提供するために Graphics クラスを拡張する java.awt.Graphics2D で構成されます。

パッケージが提供する機能は次のとおりです:

  • プリミティブな幾何学的形状や図形のレンダリングをサポートします。
  • ストロークを使用して、ペイント属性で指定された任意の色またはパターンで任意のシェイプの内部を塗りつぶすオプションが提供されます。
  • 指定された画像をレンダリングできます。
  • テキスト文字列をペイント属性で指定された色で塗りつぶされたグリフに変換できます。

例 #1

同じ Java プログラムを見て、それがどのように動作するかを見てみましょう。

コード:

import javax.swing.JFrame;
import java.awt.*;       // AWT package is responsible for creating GUI
import javax.swing.*;    // Java swing package is responsible to provide UI components
// AWT class extents Jframe which is part of Swing package
public class AWTGraphicsSampleProgram extends JFrame {
/**
*
*/
// Defining all the static variables
private static final long serialVersionUID = 1L;
public static final int SAMPLE_CANVAS_WIDTH  = 500;
public static final int SAMPLE_CANVAS_HEIGHT = 500;
// The program enters from the main method
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new AWTGraphicsSampleProgram(); // this run method will create a new object and thus invoke the constructor method.
}
});
}
//Here we are creating an instance of the drawing canvas inner class called DrawCanwas
private DrawCanvas sampleCanvas;
public AWTGraphicsSampleProgram() {
sampleCanvas = new DrawCanvas();
sampleCanvas.setPreferredSize(new Dimension(SAMPLE_CANVAS_WIDTH,            SAMPLE_CANVAS_HEIGHT));
Container containerPane = getContentPane();
containerPane.add(sampleCanvas);
setDefaultCloseOperation(EXIT_ON_CLOSE);   // setting up the default close mechanism
pack();
setTitle("......");  // set the desired title of the JFrame
setVisible(true);    // setVisible method will be set the visibility of the Jframe to true
}
/**
* here drawCanvas is the inner class of the Jpanel which is used for custom drawing
*/
private class DrawCanvas extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
// Overriding paintComponent will let you to design your own painting
@Override
public void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
setBackground(Color.BLACK);  // setting the background color to black
graphics.setColor(Color.GREEN);  // setting up the color to green
graphics.drawLine(30, 40, 100, 200);
graphics.drawOval(150, 180, 10, 10);
graphics.drawRect(200, 210, 20, 30);
graphics.setColor(Color.magenta);
graphics.fillOval(300, 310, 30, 50);
graphics.fillRect(400, 350, 60, 50);
graphics.setColor(Color.WHITE);
graphics.setFont(new Font("Monospaced", Font.PLAIN, 12)); // setting up the font style and font size
graphics.drawString("Java Graphics in 2D ...", 10, 20);
}
}
}
ログイン後にコピー

出力:

Java での 2D グラフィックス

Graphics クラスは、さまざまなグラフィック オブジェクトを描画するためのさまざまなメソッドを提供します。最も一般的なメソッドは、drawString()、drawImage()、および fillXxx() です。これらの方法は大きく 2 つのカテゴリに分類できます。 1 つ目のタイプのグラフィックス メソッドは、ユーザーが基本的な形状、テキスト、画像をレンダリングできるようにする描画機能と塗りつぶし機能を提供します。もう 1 つのタイプの方法は、コンソールでの描画の表示方法の効果を変更できる属性設定用です。 setColor や setFont などのメソッドを使用すると、描画と塗りつぶしのレンダリング方法を決定できます。グラフィックス コンテキストは、現在のフォントの現在の描画色などの状態または属性を維持する責任があります。

例 #2

Java 2D クラスで他に何を達成できるかを別の例で見てみましょう。

コード:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
public class GeometricShapes extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
@SuppressWarnings("deprecation")
public GeometricShapes()
{
super( "Geometric shapes" );
setSize( 425, 160 );
show();
}
public static void main( String args[] )
{
GeometricShapes figure = new GeometricShapes();
figure.addWindowListener( new WindowAdapter()
{
public void windowclosing( WindowEvent e )
{
System.exit( 0 );
}
});
}
public void paint( Graphics graphics )
{
// Instantiating Graphics 2D class
Graphics2D graphics2D = ( Graphics2D ) graphics;
graphics2D.setPaint( new GradientPaint( 16, 30,
Color.red,
45, 105,
Color.green,
true ) );
graphics2D.fill( new Ellipse2D.Double( 6, 31, 61, 105 ) );
graphics2D.setPaint( Color.black );
graphics2D.setStroke(new BasicStroke( 9.0f ) );
graphics2D.draw( new Rectangle2D.Double( 82, 32, 67, 102 ) );
// This will create a black colored rounded rectangle
BufferedImage bufferedImage = new BufferedImage( 10, 10,                                  BufferedImage.TYPE_INT_RGB );
Graphics2D design = bufferedImage.createGraphics();
design.setColor( Color.blue );
design.fillRect( 0, 0, 9, 9 );
design.setColor( Color.orange );
design.drawRect( 2, 2, 7, 7 );
design.setColor( Color.black );
design.fillRect( 2, 2, 4, 4 );
design.setColor( Color.pink );
design.fillRect( 5, 5, 2, 2 );
graphics2D.setPaint( new TexturePaint( bufferedImage, new Rectangle( 9, 9 ) ) );
graphics2D.fill( new RoundRectangle2D.Double( 156, 31, 76, 101, 51, 51 ) );
graphics2D.setPaint( Color.CYAN );
graphics2D.setStroke(new BasicStroke( 7.0f ) );
graphics2D.draw( new Arc2D.Double( 240, 30, 75, 100, 0, 270, Arc2D.PIE ) );
// this will create line in red and black color
graphics2D.setPaint( Color.red );
graphics2D.draw( new Line2D.Double( 400, 40, 350, 180 ) );
float dashesArray[] = { 20 };
graphics2D.setPaint( Color.black );
graphics2D.setStroke( new BasicStroke( 4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 10, dashesArray, 0 ) );
graphics2D.draw( new Line2D.Double( 320, 30, 395, 150 ) );
}
}
ログイン後にコピー

出力:

Java での 2D グラフィックス

例 #3

次のプログラムに 2D Java を適用してみましょう。

コード:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.geom.*;
public class GeometricShapes2 extends JFrame
{
/**
*
*/
private static final long <em>serialVersionUID</em> = 1L;
public static void main( String args[] )
{
GeometricShapes2 design = new GeometricShapes2();
design.addWindowListener(new WindowAdapter()
{
});
}
@SuppressWarnings("deprecation")
public GeometricShapes2()
{
super( "A circle made up of stars by joining them at certain position filled with random colors" );
setBackground( Color.<em>green</em> );
setSize( 450, 450 );
show();
}
public void paint( Graphics graphics )
{
int xCoordinates[] = { 57, 69, 111, 75, 85, 57, 29, 39, 3, 45 };
int yCoordinates[] = { 2, 38, 38, 56, 98, 74, 98, 56, 38, 38 };
Graphics2D graphics2D = ( Graphics2D ) graphics;
GeneralPath starFigure = new GeneralPath();
starFigure.moveTo( xCoordinates[ 0 ], yCoordinates[ 0 ] );
for ( int j = 1; j < xCoordinates.length; j++ )
starFigure.lineTo( xCoordinates[ j ], yCoordinates[ j ] );
starFigure.closePath();
graphics2D.translate( 200, 200 );
for ( int i = 1; i <= 10; i++ )
{
graphics2D.rotate( Math.<em>PI</em> / 9.0 );
graphics2D.setColor(new Color( ( int ) ( Math.<em>random</em>() * 128 ),( int ) ( Math.<em>random</em>() * 128 ),
( int ) ( Math.<em>random</em>() * 128 ) ) );
graphics2D.fill( starFigure );
}
}
}
ログイン後にコピー

出力:

Java での 2D グラフィックス

例 #4

次のプログラムでカラーコーディングを適用します。

コード:

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class GeometricShapes3 extends Canvas {
/**
*
*/
private static final long serialVersionUID = 1L;
Frame windowFrame;
TextField sampleText;
Font sampleFont;
Color colorOfText;
Color colorOfCircle;
public static void main(String args[]) {
GeometricShapes3 start;
start = new GeometricShapes3();
}
public GeometricShapes3() {
this("Arial", Font.BOLD, 18, Color.gray, Color.red);
}
public GeometricShapes3(String ff, int fs, int fz, Color bg, Color fg) {
setBackground(bg);
colorOfCircle = Color.green.brighter();
colorOfText = fg;
sampleFont = new Font(ff, fs, fz);
sampleText = new TextField("eduCBA (Corporate Bridge Consultancy Pvt Ltd) ");
windowFrame = new Frame("Demo");
windowFrame.add(sampleText, BorderLayout.NORTH);
windowFrame.add(this, BorderLayout.CENTER);
windowFrame.setSize(new Dimension(300,340));
windowFrame.setLocation(150,140);
windowFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
sampleText.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
repaint();
}
});
windowFrame.setVisible(true);
}
public void paint(Graphics graphics) {
String sampleTxt = sampleText.getText();
if (sampleTxt.length() == 0) return;
if (graphics instanceof Graphics2D) {
Dimension dimension = getSize();
Point point = new Point(dimension.width / 2, dimension.height / 2);
int radius = (int)(point.x * 0.84);
graphics.setColor(colorOfCircle);
graphics.drawArc(point.x - radius, point.y - radius,
radius*2-1, radius*2-1,
0, 360);
graphics.setColor(colorOfText);
graphics.setFont(sampleFont);
CircularText((Graphics2D)graphics, sampleTxt, point, radius, -Math.PI/2, 1.0);
}
else {
System.out.println("Some Error Occurred");
}
}
static void CircularText(Graphics2D graphics, String sampleTxt, Point center,
double radius, double length, double height)
{
double circleAngle = length;
Point2D circle = new Point2D.Double(center.x, center.y);
char chArray[] = sampleTxt.toCharArray();
FontMetrics fm = graphics.getFontMetrics();
AffineTransform formx, formy;
formx = AffineTransform.getTranslateInstance(circle.getX(),circle.getY());
for(int i = 0; i < chArray.length; i++) {
double cwid = (double)(getWidth(chArray[i],fm));
if (!(chArray[i] == ' ' || Character.isSpaceChar(chArray[i]))) {
cwid = (double)(fm.charWidth(chArray[i]));
formy = new AffineTransform(formx);
formy.rotate(circleAngle, 0.0, 0.0);
String chstr = new String(chArray, i, 1);
graphics.setTransform(formy);
graphics.drawString(chstr, (float)(-cwid/2), (float)(-radius));
}
if (i < (chArray.length - 1)) {
double adv = cwid/2.0 + fm.getLeading() + getWidth(chArray[i + 1],fm)/2.0;
circleAngle += Math.sin(adv / radius);
}
}
}
static int getWidth(char charText, FontMetrics fontMetrics) {
if (charText == ' ' || Character.isSpaceChar(charText)) {
return fontMetrics.charWidth('n');
}
else {
return fontMetrics.charWidth(charText);
}
}
} <strong> </strong><strong>Output:</strong>
ログイン後にコピー

Java での 2D グラフィックス

例 #5

テキストグラフィック用の 2D Java。

コード:

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
public class FontsDemo extends Frame {
/**
*
*/
private static final long <em>serialVersionUID</em> = 1L;
public static void main( String[] argv ) {
FontsDemo myExample = new FontsDemo( "Text Graphics" );
}
public FontsDemo( String title ) {
super( title );
setSize( 450, 180 );
addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent we ) {
dispose();
System.<em>exit</em>( 0 );
}
} );
setVisible( true );
}
public void paint( Graphics g ) {
Graphics2D graphics = (Graphics2D) g;
FontRenderContext frc = graphics.getFontRenderContext();
Font font = new Font( "Arial", Font.<em>HANGING_BASELINE</em> | Font.<em>BOLD</em>, 72 );
TextLayout tl = new TextLayout( "eduCBA", font, frc );
Shape myShape = tl.getOutline( AffineTransform.<em>getTranslateInstance</em>( 50, 100 ) );
Paint myPaint = loadTextureResource( "1.gif" );
graphics.setPaint( myPaint );
graphics.fill( myShape );
}
public TexturePaint loadTextureResource( String absfilename ) {
MediaTracker tracker = new MediaTracker( this );
Image imtexture = Toolkit.getDefaultToolkit().getImage( absfilename );
tracker.addImage( imtexture, 0 );
try {
tracker.waitForID( 0 );
int width = imtexture.getWidth( this );
int height = imtexture.getHeight( this );
System.<em>out</em>.println( "width" + width + " height =" + height );
BufferedImage buffImg = new
BufferedImage( width, height, BufferedImage.<em>TYPE_INT_ARGB</em> );
Graphics g = buffImg.getGraphics();
g.drawImage( imtexture, 0, 0, this );
return new TexturePaint( buffImg, new Rectangle2D.Double( 0, 0, width, height ) );
}
catch( Exception e ) {
System.<em>out</em>.println( "Exception on Image-Texture Loading" );
}
return null;
}
}
ログイン後にコピー

出力:

Java での 2D グラフィックス

結論

記事は終わりに達しましたが、Java 2D グラフィックスを使用して何が実現できるかについては十分理解していただけたと思います。正直なところ、Java 2D クラスの機能は単純な形状や図形に限定されません。複雑な図形や幾何学的形状を設計するために拡張できますが、主に既存のクラスとメソッドをどのように活用するかによって決まります。

以上がJava での 2D グラフィックスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Feb 07, 2025 pm 12:11 PM

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。

See all articles