标签: java-2d

如何绘制通过三个点的曲线?

我正在尝试创建一条曲线,该曲线通过Java中的三个给定点(我通过扩展JPanel的类绘制曲线).我该怎么做?

在此输入图像描述

java java-2d

3
推荐指数
2
解决办法
9075
查看次数

如何正确对齐此文本?

我今天写这极时钟和我差不多完成exept我想我对齐类似于线内文字.有谁知道如何做到这一点?我曾尝试使用FontRenderContext和字体指标,但我似乎无法让它工作.这是完整的源代码,因此您可以编译它并自己查看.

import java.applet.Applet;
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.util.Calendar;
import java.util.TimeZone;

public class Clock extends Applet implements Runnable {

int[][] colorsInt = {{20,20,20},{100,100,50},{50,100,100},{10,170,50},{79,29,245},{24,69,234},{253,24,103}};
Color[] colors;
int size;
int radius;
boolean anitalias = false;
static final float HPI = (float)(Math.PI / 180f);

public void start() {
    enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK); …
Run Code Online (Sandbox Code Playgroud)

java applet swing rotation java-2d

3
推荐指数
1
解决办法
2578
查看次数

图形字符串的起源在哪里开始?

在核心Java书中,它说

getStringBounds方法返回的矩形的宽度是字符串的水平范围.矩形的高度是上升,下降和前导的总和.矩形的原点位于字符串的基线处.矩形的顶部y坐标是负的.因此,您可以获得字符串宽度,高度和上升,如下所示:

double stringWidth = bounds.getWidth();
double stringHeight = bounds.getHeight();
double ascent = -bounds.getY();
Run Code Online (Sandbox Code Playgroud)

当说矩形的原点位于字符串的基线时,作者的意思是什么,而顶部的y坐标是上升?

字符串的边界矩形从哪里开始?

用测试字符串我得到以下内容:

w: 291.0
h: 91.265625
x:0.0
y:-72.38671875
descent: 15.8203125
leading: 3.0585938
Run Code Online (Sandbox Code Playgroud)

这意味着矩形原点位于前导而不是基线,我对此是否正确?

java graphics swing awt java-2d

3
推荐指数
1
解决办法
452
查看次数

在java中创建alpha图像

我即将开始研究一个项目,该项目将生成一些带有alpha(渐变)的PNG,并希望在java中以编程方式绘制它们.

对于(一个简单的)示例,我想绘制一个框,添加一个阴影,然后将其保存到PNG文件,然后可以将其覆盖在其他图形上.

  1. 这可能与标准的JRE系统库有关吗?
  2. 哪些库会使这种操作变得简单?

谢谢.

java java-2d

3
推荐指数
1
解决办法
967
查看次数

绘制矩形占绘图面板的百分之几

我想绘制矩形,只指定面板的高百分比,并且当我调整面板大小时,它应该调整自身大小.但我的问题是drawRect()只接受整数,所以当我尝试绘制矩形例如45%的面板高度时,如果面板高度小于100,它将转换为0.

我的代码很简单,所以你可以尝试一下.这是我的代码:

public class Drawer extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
            g.fillRect(10,this.getHeight()-this.getHeight()/100*45, 100, this.getHeight()-this.getHeight()/100*45);
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing awt java-2d jpanel

3
推荐指数
1
解决办法
329
查看次数

通过2点绘制无限线?

我正在寻找一种通过2点绘制无限线(无线的线,也称为射线)的方法.我可以用Line2D在2点之间划一条线,这里没问题.

接下来,无限部分需要一看.用我简单的思维思考,让我们将第二个点的x和y坐标乘以100并重新绘制线条.这有效,但仅限于简单情况.

例如,这里是一个生成不同角度的线的情况:

    g.setColor(Color.red);
    g2.setStroke(new BasicStroke(4.0f));
    g2.draw(new Line2D.Double(0, 61.632653061218946, 944, 217.25510204080692));
    g.setColor(Color.blue);
    g2.setStroke(new BasicStroke(1.0f));
    g2.draw(new Line2D.Double(0, 61.632653061218946, 944*10, 217.25510204080692*10));
Run Code Online (Sandbox Code Playgroud)

这将首先绘制一条胖红线,接下来它将绘制一条蓝色细线.

与红线相比,蓝线具有不同的角度.这是一个截图来说明这种效果:

在此输入图像描述

有人知道解决这个问题的方法吗,或者更好的方法是通过2分画出无限线?

java line java-2d graphics2d

3
推荐指数
1
解决办法
3464
查看次数

Java2D神器?

我正在使用Java2D进行我正在编写的游戏,并且在我开始将其与其他swing组件集成之前没有遇到任何问题.我的问题是当我添加到JFrame的第一个组件不是我正在绘制的画布时,当我将鼠标悬停在文本窗格的滚动条上时,我会看到一个奇怪的神器.每次执行应用程序时都会发生这种情况.当我第一次使用画布时,没有问题.

出于某种原因,这似乎只发生在Windows上,当使用默认的Java2D管道时(恰好是sun.java2d.d3d = true),并且会发生工件.当我设置sun.java2d.opengl = true或sun.java2d.noddraw = false AND sun.java2d.d3d = false时,它不会发生.

我猜这是Direct3D Java2D管道的某种错误?我可以轻松地解决它,但很想知道是否有其他人遇到过这样的问题?我正在运行最新的JDK7u7,但它也适用于以前的版本.我应该注意,如果我最小化窗口并恢复它,那么工件就会消失,并且在我重新启动应用程序之前永远不会返回.

有神器: 坏

没有工件(首先添加画布而不是JLabel图像): 好

如果有人对此有任何进一步的信息,我会很感激.谢谢!

java swing java-2d

3
推荐指数
1
解决办法
506
查看次数

用红色掩码创建的java缓冲图像

我在阅读图像时遇到问题.如果我做以下事情

URL url = new URL("http://tctechcrunch2011.files.wordpress.com/2012/10/gmm.jpg");
ImageInputStream stream = ImageIO.createImageInputStream(url.openStream());
ImageReader reader = ImageIO.getImageReaders(stream).next();
reader.setInput(stream, true, true);
BufferedImage image = reader.read(0);

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageWriter writer = ImageIO.getImageWritersByFormatName("JPEG").next();
ImageOutputStream ios = ImageIO.createImageOutputStream(bos);
writer.setOutput(ios);
IIOImage ioImage = new IIOImage(image, null, null);
writer.write(ioImage);
ios.close();
FileOutputStream fos = new FileOutputStream("badimage.jpeg");
fos.write(bos.toByteArray());
fos.close();
Run Code Online (Sandbox Code Playgroud)

图像用红色调写.是否有一些选项需要设置才能正确读取此图像?

java awt java-2d

3
推荐指数
1
解决办法
3523
查看次数

Java Graphics2D 擦除到 alpha 背景

我正在制作一个具有绘图板的应用程序,您可以在其中使用鼠标进行绘制,它会绘制在 BUfferedImage 中的标签之上。我现在正在尝试实现的是橡皮擦,问题是我找不到任何帮助将橡皮擦制作为 clearRect() 到 alpha 背景。(我无法定义颜色背景,因为用户可以将背景更改为他想要的任何图像)。总结:

  • 如何用 alpha 像素擦除/覆盖 Graphics2D 像素?我发现的方法是使用 clearRect 但您需要指定背景颜色。

以下是我的 DrawBoard 类,其中包含要绘制的所有内容。

public class DrawBoard extends JPanel implements MouseListener, MouseMotionListener{


public JLabel status;
private JLabel imgLabel; // this is where the drawing happens
public Point pstart, pfinish;
private List<Point> points = new ArrayList<Point>();
private List<BufferedImage> lines = new ArrayList<BufferedImage>();

private static final int BI_WIDTH = 1024;
private static final int BI_HEIGHT = 800;
private static int STROKESIZE = 7;

private BufferedImage bImage = new BufferedImage(BI_WIDTH, …
Run Code Online (Sandbox Code Playgroud)

java user-interface java-2d erase graphics2d

3
推荐指数
1
解决办法
2141
查看次数

Raster.getPixels()返回的像素组件的顺序是什么?

我写过图像处理代码,将像素数据复制成整数数组,如下所示:

void processImage(BufferedImage source) {

    WritableRaster raster = source.getRaster();
    int numBands = raster.getNumBands();
    int height = raster.getHeight();
    int width = raster.getWidth();

    int[] pixelRow = new int[width * numBands];
    for (int i = 0; i < height; i++) {
        raster.getPixels(raster.getMinX(), raster.getMinY() + i, width, 1, pixelRow);

        // do some processing
    }

    // create a new image
    return newImage;
}
Run Code Online (Sandbox Code Playgroud)

该代码适用于我迄今为止测试过的图像.所述pixelRow阵列似乎总是接收的顺序的红,绿和蓝为与3个频带的图像(没有alpha通道)和像素分量的顺序红,绿,蓝和Alpha对于那些4个频带(alpha通道).

但是,我找不到任何说明这一点的说明.是否保证我将始终按顺序获取像素组件?有没有描述这个的规范?

java awt java-2d

3
推荐指数
1
解决办法
2336
查看次数

标签 统计

java ×10

java-2d ×10

awt ×4

swing ×4

graphics2d ×2

applet ×1

erase ×1

graphics ×1

jpanel ×1

line ×1

rotation ×1

user-interface ×1