Java窗口中实现圆和直线绘制的示例代码

版权申诉
0 下载量 35 浏览量 更新于2024-10-17 收藏 8KB RAR 举报
资源摘要信息:"Java窗口绘制圆形和直线的实现方法" 在Java编程中,图形用户界面(GUI)的创建通常会使用AWT(Abstract Window Toolkit)和Swing库。在本资源中,我们将关注如何利用Java在窗口中绘制圆形和直线。这涉及到对Java中的Canvas类和Graphics类的运用。以下是详细的知识点: 1. Java基础 - Java是一种高级编程语言,主要用于开发基于网络的应用程序、移动应用程序、企业应用程序等。 - AWT是Java的一个核心包,提供了创建用户界面和绘制图形、图像的基础支持。 - Swing是建立在AWT之上,用于创建跨平台的图形用户界面组件。 2. AWT和Swing组件 - AWT组件:如Frame, Panel, Canvas等,它们是用于构建GUI的基础。 - Canvas:是一个可以绘制图形的组件,通常用于自定义绘图。 3. Graphics类 - Graphics类是所有图形上下文类的抽象超类,用于绘制图形和图像。 - Graphics类提供了绘制基本图形如点、线、矩形、圆形等的方法,例如drawLine(), drawOval()等。 4. 创建窗口并绘制图形 - 创建窗口:通常使用JFrame类,它可以创建一个窗口(frame),用于容纳其他组件。 - 创建画布:通过继承Canvas类创建一个画布类,在其中重写paint()方法以实现自定义绘图。 - 绘制圆形:在paint()方法中使用Graphics类的drawOval(int x, int y, int width, int height)方法绘制圆形。 - 绘制直线:使用Graphics类的drawLine(int x1, int y1, int x2, int y2)方法绘制直线。 5. 实际应用 - 在实际开发中,我们通常需要创建一个继承自JFrame的类,在其中添加自定义的Canvas类,并覆盖其paint()方法以实现自定义的图形绘制。 - 调用Graphics对象的绘制方法时,需要传入相应的坐标点或尺寸参数,这些参数决定了图形的大小、形状和位置。 6. 编程示例 - 示例代码会创建一个窗口,并在窗口中绘制一个圆形和一条直线。 - 代码会涉及到窗口的初始化、画布的创建和绘制逻辑的实现。 通过以上知识点的介绍,我们可以了解到如何使用Java语言结合AWT和Swing库,在一个新建的窗口中绘制圆形和直线。这些技能对于任何希望创建交互式图形应用程序的Java开发者来说都是非常重要的基础技能。

import jittor as jt import jrender as jr jt.flags.use_cuda = 1 # 开启GPU加速 import os import tqdm import numpy as np import imageio import argparse # 获取当前文件所在目录路径和数据目录路径 current_dir = os.path.dirname(os.path.realpath(__file__)) data_dir = os.path.join(current_dir, 'data') def main(): # 创建命令行参数解析器 parser = argparse.ArgumentParser() parser.add_argument('-i', '--filename-input', type=str, default=os.path.join(data_dir, 'obj/spot/spot_triangulated.obj')) parser.add_argument('-o', '--output-dir', type=str, default=os.path.join(data_dir, 'results/output_render')) args = parser.parse_args() # other settings camera_distance = 2.732 elevation = 30 azimuth = 0 # load from Wavefront .obj file mesh = jr.Mesh.from_obj(args.filename_input, load_texture=True, texture_res=5, texture_type='surface', dr_type='softras') # create renderer with SoftRas renderer = jr.Renderer(dr_type='softras') os.makedirs(args.output_dir, exist_ok=True) # draw object from different view loop = tqdm.tqdm(list(range(0, 360, 4))) writer = imageio.get_writer(os.path.join(args.output_dir, 'rotation.gif'), mode='I') imgs = [] from PIL import Image for num, azimuth in enumerate(loop): # rest mesh to initial state mesh.reset_() loop.set_description('Drawing rotation') renderer.transform.set_eyes_from_angles(camera_distance, elevation, azimuth) rgb = renderer.render_mesh(mesh, mode='rgb') image = rgb.numpy()[0].transpose((1, 2, 0)) writer.append_data((255*image).astype(np.uint8)) writer.close() # draw object from different sigma and gamma loop = tqdm.tqdm(list(np.arange(-4, -2, 0.2))) renderer.transform.set_eyes_from_angles(camera_distance, elevation, 45) writer = imageio.get_writer(os.path.join(args.output_dir, 'bluring.gif'), mode='I') for num, gamma_pow in enumerate(loop): # rest mesh to initial state mesh.reset_() renderer.set_gamma(10**gamma_pow) renderer.set_sigma(10**(gamma_pow - 1)) loop.set_description('Drawing blurring') images = renderer.render_mesh(mesh, mode='rgb') image = images.numpy()[0].transpose((1, 2, 0)) # [image_size, image_size, RGB] writer.append_data((255*image).astype(np.uint8)) writer.close() # save to textured obj mesh.reset_() mesh.save_obj(os.path.join(args.output_dir, 'saved_spot.obj')) if __name__ == '__main__': main()在每行代码后添加注释

2023-06-07 上传
2023-06-07 上传
2023-06-14 上传