JavaFX技巧2:使用Canvas API进行清晰绘图

当我最初开始使用Canvas API时,我注意到渲染代码的结果有些模糊,甚至更糟,不一致。 有些线条模糊,有些线条清晰。 来自Swing,我花了一些时间才意识到这是由JavaFX的坐标系引起的,该坐标系允许双精度渲染。
为了解决这个问题,所需要的只是在“中间”使用坐标。 因此,在我的代码中,您现在可以找到很多称为snapXZY()的方法(可以在JavaFX代码本身中找到类似的方法),该方法首先将给定的坐标转换为整数,然后将其添加.5。 以下屏幕截图显示了使用这种方法的区别。 bildschirmfoto-2014-04-10-um-11-59-49 下面的代码用于此示例:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;/*** Tip 2: How to render sharp lines in a canvas.*/
public class Tip2DrawingSharpLinesInCanvas extends Application {class MyCanvas extends Canvas {public MyCanvas(boolean drawSharpLines) {setWidth(150);setHeight(150);double w = getWidth();double h = getHeight();GraphicsContext gc = getGraphicsContext2D();gc.clearRect(0, 0, w, h);gc.setStroke(Color.GRAY);gc.strokeRect(0, 0, w, h);for (double y = 20; y <= h - 20; y += 10) {if (drawSharpLines) {// Snap the y coordinate gc.strokeLine(10, snap(y), w - 10, snap(y));} else {gc.strokeLine(10, y, w - 10, y);}}}private double snap(double y) {return ((int) y) + .5;}}@Overridepublic void start(Stage stage) throws Exception {MyCanvas canvasBlurry = new MyCanvas(false);MyCanvas canvasSharp = new MyCanvas(true);Label labelBlurry = new Label("Blurry");Label labelSharp = new Label("Sharp");VBox.setMargin(canvasBlurry, new Insets(10));VBox.setMargin(canvasSharp, new Insets(10));VBox.setMargin(labelBlurry, new Insets(10, 10, 0, 10));VBox.setMargin(labelSharp, new Insets(10, 10, 0, 10));VBox box = new VBox();box.getChildren().add(labelBlurry);box.getChildren().add(canvasBlurry);box.getChildren().add(labelSharp);box.getChildren().add(canvasSharp);stage.setScene(new Scene(box));stage.setTitle("Tip 2: Sharp Lines in Canvas");stage.show();}public static void main(String[] args) {launch(args);}
}

翻译自: https://www.javacodegeeks.com/2014/04/javafx-tip-2-sharp-drawing-with-canvas-api.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在阳光下歌唱

在阳光下歌唱 ——代腾飞 2007年11月27日 于成都 在寒冬迷雾阴霾已久的早上 突然迎来了一轮金色的太阳 清新的晨风轻抚着我的脸庞 一缕缕暖暖的阳光洒子身上 让人倍感清新爽朗欢心舒畅 昔日的忧伤也不再让人惆怅 往日的苦难也顿时被人遗忘 骑着车儿在阳光下尽情歌唱 我歌唱秋…

[Apple开发者帐户帮助]五、管理标识符(4)注册一个应用程序组

您需要注册一个或多个组才能启用应用组。 所需角色&#xff1a;帐户持有人或管理员。 在“ 证书”&#xff0c;“标识符和配置文件”中&#xff0c;从左侧的弹出菜单中选择操作系统。 在“标识符”下&#xff0c;选择“应用程序组”&#xff0c;然后单击右上角的“添加”按钮&…

JDK 8中的Oracle Drops Collection文字

在OpenJDK JEP 186上的一个帖子中&#xff0c;Oracle的Brian Goetz通知Oracle在JDK8中不会将集合文字用作语言功能。 集合文字是一种语法表达式形式&#xff0c;其求值形式为数组&#xff0c;列表或映射的聚合类型。 Project Coin提出了集合文字&#xff0c;这也补充了Java SE…

linux软件安装非系统盘,linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装...

linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装答案:2 信息版本&#xff1a;手机版解决时间 2020-07-24 14:13已解决2020-07-23 16:48打开linux操作系统iso压缩包,没有setup,听说要在虚拟机上安装&#xff0c;能不能不用虚拟机安装&#xff0c;在硬盘…

java中值传递和引用传递

1&#xff1a;按值传递是什么 指的是在方法调用时&#xff0c;传递的参数是按值的拷贝传递。 按值传递重要特点&#xff1a;传递的是值的拷贝&#xff0c;也就是说传递后就互不相关了。 2&#xff1a;按引用传递是什么 指的是在方法调用时&#xff0c;传递的参数是按引用进行传…

HTML5 Inline SVG

这是效果图&#xff1a; 1 <!DOCTYPE html>2 <html>3 <head>4 <meta content"text/html; charsetutf-8" http-equiv"Content-Type" />5 <title>geovindu svg</title>6 </head>7 <body>8 9 <svg width&…

【err】VIDEOIO ERROR: V4L: index 0 is not correct!Unable to connect to camera

前言 新到手一块板子&#xff0c;程序编译成功之后&#xff0c;运行出现错误&#xff0c;不能连接到摄像头。 问题 VIDEOIO ERROR: V4L: index 0 is not correct! Unable to connect to camera 查询系统摄像头接口 ubuntumyimx6ek200:~/build$ ls /dev/vi* /dev/video0 /dev/vi…

linux 卸载lv,Linux 软件安装、卸载、查询

平台构建及注意事项软件安装、配置等一、RPM 安装方法&#xff1a;# RPM -ivh XXX.rpm软件将被安装到缺省目录下。(不可指定安装路径&#xff01;)二、软件卸载&#xff1a;1、查询安装的软件注册名称&#xff1a;# rpm -q -a 部分可猜测软件名前缀 *2、卸载软件&#xff1a;#…

前端开发网络——Ajax(GET、POST)

ajax请求的过程 我们平时输入的网址&#xff0c;比如www.baidu.com&#xff0c;就会被解析成14.215.177.39这一串数字&#xff0c;然后发送请求给后台服务器&#xff08;客户端发送http请求&#xff09;。 服务器会确认你发送的是什么请求&#xff0c;需要请求什么东西&#xf…

通过Spring将继承树加载到List中

我注意到有趣的Spring功能。 我的一位同事使用它将Spring Bean的整个继承树加载到列表中。 在学习Spring文档时错过了这一点。 让我们来看看Spring bean的继承树&#xff1a; 下面的代码片段是通过构造函数注入将该豆树加载到列表中的&#xff1a; Component public class N…

CSS DIV Shadow

css code: /*2011-11-28 塗聚文 締友計算機信息技術有限公司CSS DIV Shadowcss3 */#geovinduDiv-shadow{padding:10px;background-color:#f9f9f9;border:1px solid #fff;position:relative;/*Firefox*/-moz-box-shadow: 3px 3px 4px #000;/*Safari,Chrome*/-webkit-box-shadow:…

面试题1——反转单链表

题目 反转一个单链表 实现 1.&#xff08;递归法&#xff09;利用递归思想&#xff0c;从头结点递归遍历到最后一个结点&#xff0c;递归返回最后一个结点并修改指针&#xff0c;使指针指向前一个结点。 2.&#xff08;移动指针&#xff09;定义当前结点指针cur&#xff0c;前一…

在VS2003下把一个DataTable Update 到数据库

假设一个常见的场景先吧----实际也是我当前的场景-----把一个excel 文件导入到数据库. 这实在是一个常见的功能,但是,没想到的是, 我着实费了一把劲. 实际上,我以前写的有现成的函数来完成这个工作, 但是, 可惜那函数只能在VS2005 下工作, 在2003下面无效,无效的原因是,vs2003 …

linux 挂载有数据硬盘分区,linux下磁盘分区、挂载知多少

0x01 Linux 分区简介主分区 vs 扩展分区硬盘分区表中最多能存储四个分区&#xff0c;但我们实际使用时一般只分为两个分区&#xff0c;一个是主分区(Primary Partion)一个是扩展分区(extended partition)&#xff0c;主分区可以马上被使用但不能再分区&#xff0c;扩展分区必须…

sublime text3

注册码注册信息 v3143可用 —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 94D7F7D4 95BC8C1C 527DA828 560BB037 D1EDDD8C AE7B379F 50C9D69D B35179EF 2FE898C4 8E4277A8 555CE…

Java 8中的HashMap性能改进

HashMap<K, V>是每个Java程序中快速&#xff0c;通用且无处不在的数据结构。 首先是一些基础知识。 您可能知道&#xff0c;它使用键的hashCode()和equals()方法在存储桶之间拆分值。 存储桶&#xff08;箱&#xff09;的数量应略高于映射中的条目数&#xff0c;以便每个…

css 汉字注音,日本语片假名

代码 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns"http://www.w3.org/1999/xhtml">3 4 <head>5 <meta content"te…

Microsoft .NET 框架资源基础 ---摘自:msdn

Chris SellsSells Brothers Consulting 摘要&#xff1a;Chris Sells 讨论无类型清单资源和有类型资源&#xff0c;它们是受 Microsoft .NET 框架支持的两种资源。他定义了这两种资源&#xff0c;并介绍了如何在您自己的应用程序中使用它们。 下载 winforms02202003.exe 示例文…

HDU 5025Saving Tang Monk BFS + 二进制枚举状态

3A的题目&#xff0c;第一次TLE&#xff0c;是因为一次BFS起点到终点状态太多爆掉了时间。 第二次WA&#xff0c;是因为没有枚举蛇的状态。 解体思路&#xff1a; 因为蛇的数目是小于5只的&#xff0c;那就首先枚举是否杀死每只蛇即可。 然后多次BFS&#xff0c;先从起点到第一…

ansible模块之yum、pip、service、corn、user、group

ansible相关模块 yum rpm 和yum 的区别 rpm&#xff1a;全称redhat package manager &#xff08;红帽包管理器&#xff09; 不能解决包之间的依赖关系 yum&#xff1a;可以解决依赖关系yum 源配置[rootlocalhost ~]# cat /etc/yum.repos.d/epel.repo [epel] nameExtra Package…