java - 在圆圈内绘制文本的交叉区域

标签 java swing text graphics intersection

我想在圆圈上写文字。文本和圆圈的交叉区域必须是不同的颜色。

起初我想使用区域类,但我不知道如何将文本转换为区域。

我仍然不知道如何将文本转换为形状或其他东西。

这是示例图片:

http://i.hizliresim.com/wOW2oQ.png

void paintComponent(Graphics g){
Ellipse2D myEllipse = new Ellipse2D.Double(20,20,100,100);

//i have no idea how to create a text as a shape.
//if i was able to create a text as a shape,i would name it "myText"

a1.add(new Area(myEllipse));
a2.add(new Area(myText)); 

g2.setColor(Color.red);
g2.fill(myEllipse);

g2.setColor(Color.CYAN);
g2.fill(myText);

a1.intersect(a2);
g2.setColor(Color.BLACK);
g2.fill(a1);

}

最佳答案

绘画引擎可以自己处理这个问题。看一下图形的 XOR 模式:

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html#setXORMode(java.awt.Color)

在您的示例中,您必须在写入文本之前将 XOR 颜色设置为白色:

Graphics2D g2 = (Graphics2D) g;

g2.setColor(Color.white);
g2.fillRect(0, 0, getWidth(), getHeight());

g2.setColor(Color.BLUE);
g2.fill(myEllipse);

g2.setColor(Color.red);
g2.setXORMode(Color.white); // Set XOR mode to white
g2.drawString(myText, 70, 70);

找到正确的异或颜色可能非常棘手。但关于this question ,您必须按位异或图形的前景、异或颜色和要绘制的颜色。

对于圆形区域,我们得到:

Foreground = FF 00 00 (red)
XOR-Color  = FF FF FF (white)
Background = 00 00 FF (blue)
----------------------
Result     = 00 FF 00 (green)

和外部:

Foreground = FF 00 00 (red)
XOR-Color  = FF FF FF (white)
Background = FF FF FF (white)
----------------------
Result     = FF 00 00 (red)

更新:

要查找 XOR/前景对,您可以执行以下操作:

您必须通过 XOR 组合背景和结果颜色。我们看到,对于这两种情况(椭圆内和椭圆外),我们有

Ellispe: 00 00 FF ^ 00 FF 00 = 00 FF FF
Outside: FF FF FF ^ FF 00 00 = 00 FF FF

因此,我们可以选择任何 XOR/前景对,通过 XOR 得到 00 FF FF。在示例中,我使用了白色和红色,但黑色和青色会产生相同的结果。

关于java - 在圆圈内绘制文本的交叉区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781683/

相关文章:

javascript - 使用javascript清除按钮单击上的输入框

java - 如何从 JComboBox 检索数据并将其存储在 JTextFields 中?

java - 如何将 JTextField 的输入转换为 double.输入值来自用户

Java - 设置装饰 JFrame 的大小

java - 将 JPanel 添加到主面板

python - 自动调整文本小部件的高度以适应所有文本

java - XML文本处理

java - 无论如何,使用 rs.next() 加载 java 数组都会引发空指针错误。用控制台检查

java - 为什么 Java 中的 switch 语句的范围没有限制?

android - 在Android框架中编辑文本