我正在写一个自定义渲染的程序,并需要渲染带边框的矩形。我决定简单地调用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不能正常工作与半透明的颜色相关推荐

  1. 优秀的Java程序员必须了解GC的工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

  2. java 怎么获取object的数据_自学java,想将来从事大数据工作,现实吗?怎么学?...

    自学java,想将来从事大数据工作,怎么学? 我是大一通信工程的一名学生,我们学习的是C,但我将来想从事大数据开发的工作,我想向各位大佬请教一下,像我这种情况,自学java然后去从事大数据工作是不是不 ...

  3. java学到什么程度可找工作_Java学到什么程度可以找工作

    原标题:Java学到什么程度可以找工作 实际上Java初级开发岗位对于从业者的要求并不高,通常能够熟练使用常见的Java框架就可以找到第一份工作了(很可能是外包).但是外行人难免忐忑,心里没谱儿,到底 ...

  4. Java学历很重要_Java开发找工作,学历重要还是技术重要?

    都很重要,一个决定你有没有面试机会,一个决定你是否能够面试通过! 目前市场上面的基本上是需要大专以上的学历,你是本科,完全可以的 至于你要考研还是去工作,这个就看你自己的决定, 选择考研的话以后的发展 ...

  5. 自学 9个月 Java 找到了一份 12K 的工作,前辈的方式值得分享给大伙

    我有一个前辈跟我讲述他的经过,他前几年 4 月份才开始正式学习 Java 的,之前在一家公司工作了 2 年,底薪一个月也不到 4000 块,日子过得很艰苦,毕竟是在杭州州的房贷压力也大,公司就那么大, ...

  6. 2021年Java发展怎么样?现在学了Java技术出来是否还能找到工作?

    Java作为编程语言中的王者,已经火爆了数十年,唱衰者认为,随着Java开发从业人数的越来越多,Java行业在未来也会饱和,今日辉煌注定不再,真的会这样吗? 为什么Java火爆20余年,依旧占据编程语 ...

  7. 自学java多久可以工作_自学java,学多久可以自己找到工作?

    自学了Java,学习的过程中无非就是两个字最重要:坚持.如果自学Java,学多久可以自己找到工作?每个人情况不同,有的学的快有的慢,几个月或者更久自学的人,就是自己没有很强方向感的人,一般都能坚持2个 ...

  8. 什么是 Java Mission Control?它是如何工作的?

    Java Mission Control 是一种性能分析工具,它以易于理解的图形.表格.直方图.列表和图表的形式呈现采样的 JVM 指标.最初旨在描述 Java Flight Recorder 分析工 ...

  9. java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题

    文章目录 先看成品 前言 一.项目目录结构 一.海报制作PosterUtil.java工具类 1. 描述 2. 代码 二.测试生成海报 1. 描述 2. 直接上代码 四.其他测试 1. Test1_C ...

  10. 优秀Java程序员应该了解的GC工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

最新文章

  1. bat批处理启动QQ、微信、企业微信
  2. mysql千万级数据索引查询_mysql千万级数据量根据索引优化查询速度
  3. servlet跳转页面的几种方法
  4. 著名模拟鼠标点击软件小点点被收购
  5. [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
  6. cte公用表表达式_SQL Server中的CTE; 查询公用表表达式
  7. Flutter实战一Flutter聊天应用(十六)
  8. 上海90后用优惠券薅羊毛45万被捕;华为再招201万元年薪“天才少年”;微软收购网络安全公司 RiskIQ|极客头条...
  9. mysql8多表连接_MySQL 多个表的 连接
  10. 局部搜索算法 之 局部搜索算法,爬山法,模拟退火,集束搜索,遗传算法
  11. CSDN博客下载器v2.2发布
  12. 为什么要学数学--读《给讨厌数学的人》第二章之读书笔记
  13. build-essential unmet dependencies 有未满足依赖 解决办法
  14. 蓄电池维护——蓄电池的基本构造和原理
  15. 第十一届蓝桥杯 ——数字三角形
  16. WHQL徽标认证申请流程
  17. linux串口读取mpu9250数据,模拟 I2C 读取 MPU9250 数据的测试笔记
  18. 找不到该项目,请确认该项目的位置
  19. flutter bloc 实例
  20. C++ 字符串、string、char *、char[]、const char*的转换和区别

热门文章

  1. 静态网页项目开发基础
  2. autoIt_v3 学习之路
  3. android so 瘦身,Android APK 瘦身实践
  4. win10拨号上网开启热点
  5. 漳州帷博计算机科技,福建省漳州市芗城中学高二6月月考语文试题 含答案(11页)-原创力文档...
  6. contrastive CAM
  7. Supervised Contrastive Learning浅读
  8. IPhone4S自定义铃声
  9. 虚拟机xftp工具连接服务器,xftp5(ftp上传工具)如何连接虚拟机?
  10. php打开EXCEL过慢,打开excel很慢,编辑某个工作表很卡