java fillrect_Java的graphics2D fillRect不能正常工作与半透明的颜色
我正在写一个自定义渲染的程序,并需要渲染带边框的矩形。我决定简单地调用graphics2D.fillRect(),切换到边框颜色,并调用graphics2D.drawRect()。但是,即使我使用相同的坐标和大小背靠背进行调用,但当我绘制的颜色是半透明(具有alpha)时,fillRect()并不总是填充drawRect包含的整个区域。此外,由fillRect()绘制的区域有时在drawRect()所包含的区域之外。为什么这两种方法在不同的地方绘制不同颜色的东西?Java的graphics2D fillRect不能正常工作与半透明的颜色
下面是一个演示问题的例子。点击窗口中的鼠标将在用alpha和不用绘制填充之间切换。请注意,当使用alpha绘图时,矩形底部有一行像素为白色,但在绘制不带alpha的绘图时,该行像素不在此处。
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ColorWithAlpha extends JPanel {
private boolean hasAlpha = true;
private static final long serialVersionUID = 1L;
/**
* @param args
*/
public static void main(String[] args) {
// setup a basic frame with a ColorWithAlpha in it
JFrame frame = new JFrame();
JPanel panel = new ColorWithAlpha();
panel.setPreferredSize(new Dimension(500, 500));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.pack();
frame.show();
}
public ColorWithAlpha() {
super();
setBackground(Color.WHITE);
this.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent arg0) {
// when the user clicks their mouse, toggle whether we are drawing a color with alhpa or without.
hasAlpha = !hasAlpha;
ColorWithAlpha.this.repaint();
}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Color color = new Color(100, 100, 250);// this color doesnt have an alpha component
// some coordinates that demonstrate the bug. Not all combinations of x,y,width,height will show the bug
int x = -900;
int y = 1557;
int height = 503;
int width = 502;
if (hasAlpha) { // toggle between drawing with alpha and without
color = new Color(200, 100, 250, 100);
}
Graphics2D g2 = (Graphics2D) g;
// this is the transform I was using when I found the bug.
g2.setTransform(new AffineTransform(0.160642570281124, 0.0, 0.0, -0.160642570281124, 250.0, 488.0));
g2.setColor(color);
g2.fillRect(x, y, width, height);
g2.setColor(Color.DARK_GRAY);
g2.setStroke(new BasicStroke(8f));
g2.drawRect(x, y, width, height);
}
}
+0
似乎是Java 2D中的一个bug。 –
2013-05-02 15:31:08
java fillrect_Java的graphics2D fillRect不能正常工作与半透明的颜色相关推荐
- 优秀的Java程序员必须了解GC的工作原理
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...
- java 怎么获取object的数据_自学java,想将来从事大数据工作,现实吗?怎么学?...
自学java,想将来从事大数据工作,怎么学? 我是大一通信工程的一名学生,我们学习的是C,但我将来想从事大数据开发的工作,我想向各位大佬请教一下,像我这种情况,自学java然后去从事大数据工作是不是不 ...
- java学到什么程度可找工作_Java学到什么程度可以找工作
原标题:Java学到什么程度可以找工作 实际上Java初级开发岗位对于从业者的要求并不高,通常能够熟练使用常见的Java框架就可以找到第一份工作了(很可能是外包).但是外行人难免忐忑,心里没谱儿,到底 ...
- Java学历很重要_Java开发找工作,学历重要还是技术重要?
都很重要,一个决定你有没有面试机会,一个决定你是否能够面试通过! 目前市场上面的基本上是需要大专以上的学历,你是本科,完全可以的 至于你要考研还是去工作,这个就看你自己的决定, 选择考研的话以后的发展 ...
- 自学 9个月 Java 找到了一份 12K 的工作,前辈的方式值得分享给大伙
我有一个前辈跟我讲述他的经过,他前几年 4 月份才开始正式学习 Java 的,之前在一家公司工作了 2 年,底薪一个月也不到 4000 块,日子过得很艰苦,毕竟是在杭州州的房贷压力也大,公司就那么大, ...
- 2021年Java发展怎么样?现在学了Java技术出来是否还能找到工作?
Java作为编程语言中的王者,已经火爆了数十年,唱衰者认为,随着Java开发从业人数的越来越多,Java行业在未来也会饱和,今日辉煌注定不再,真的会这样吗? 为什么Java火爆20余年,依旧占据编程语 ...
- 自学java多久可以工作_自学java,学多久可以自己找到工作?
自学了Java,学习的过程中无非就是两个字最重要:坚持.如果自学Java,学多久可以自己找到工作?每个人情况不同,有的学的快有的慢,几个月或者更久自学的人,就是自己没有很强方向感的人,一般都能坚持2个 ...
- 什么是 Java Mission Control?它是如何工作的?
Java Mission Control 是一种性能分析工具,它以易于理解的图形.表格.直方图.列表和图表的形式呈现采样的 JVM 指标.最初旨在描述 Java Flight Recorder 分析工 ...
- java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
文章目录 先看成品 前言 一.项目目录结构 一.海报制作PosterUtil.java工具类 1. 描述 2. 代码 二.测试生成海报 1. 描述 2. 直接上代码 四.其他测试 1. Test1_C ...
- 优秀Java程序员应该了解的GC工作原理
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...
最新文章
- bat批处理启动QQ、微信、企业微信
- mysql千万级数据索引查询_mysql千万级数据量根据索引优化查询速度
- servlet跳转页面的几种方法
- 著名模拟鼠标点击软件小点点被收购
- [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
- cte公用表表达式_SQL Server中的CTE; 查询公用表表达式
- Flutter实战一Flutter聊天应用(十六)
- 上海90后用优惠券薅羊毛45万被捕;华为再招201万元年薪“天才少年”;微软收购网络安全公司 RiskIQ|极客头条...
- mysql8多表连接_MySQL 多个表的 连接
- 局部搜索算法 之 局部搜索算法,爬山法,模拟退火,集束搜索,遗传算法
- CSDN博客下载器v2.2发布
- 为什么要学数学--读《给讨厌数学的人》第二章之读书笔记
- build-essential unmet dependencies 有未满足依赖 解决办法
- 蓄电池维护——蓄电池的基本构造和原理
- 第十一届蓝桥杯 ——数字三角形
- WHQL徽标认证申请流程
- linux串口读取mpu9250数据,模拟 I2C 读取 MPU9250 数据的测试笔记
- 找不到该项目,请确认该项目的位置
- flutter bloc 实例
- C++ 字符串、string、char *、char[]、const char*的转换和区别
热门文章
- 静态网页项目开发基础
- autoIt_v3 学习之路
- android so 瘦身,Android APK 瘦身实践
- win10拨号上网开启热点
- 漳州帷博计算机科技,福建省漳州市芗城中学高二6月月考语文试题 含答案(11页)-原创力文档...
- contrastive CAM
- Supervised Contrastive Learning浅读
- IPhone4S自定义铃声
- 虚拟机xftp工具连接服务器,xftp5(ftp上传工具)如何连接虚拟机?
- php打开EXCEL过慢,打开excel很慢,编辑某个工作表很卡