Tag: 图形

SurfaceView显示为空,没有任何渲染

我试图从一个线程中将一些形状绘制到SurfaceView上,但没有任何东西被渲染到屏幕上。 我有同样问题的人看过类似的问题,但没有一个答案让我找到了解决方案,在我的具体案例中提出了不同的原因。 我已经创建了一个简化版本的代码来演示这个问题。 渲染由RenderingTestView类处理,该类实现从SurfaceView派生的自定义视图。 渲染线程在RenderingTestView中实现为Runnable: package com.example.renderingtest.app; import android.content.Context; import android.graphics.*; import android.os.Build; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; public class RenderingTestView extends SurfaceView { private SurfaceHolder holder; private Paint paint; private boolean surfaceCreated = false; private Thread videoThread; public RenderingTestView(Context context) { super(context); init_view(context); } public RenderingTestView(Context context, AttributeSet attrs) { super(context, attrs); init_view(context); […]

如何在JAVA中设置运行时的笔触颜色?

我正在尝试创建一个界面,用户可以在其中更改线条的颜色以标记背景或图像的前景。 到目前为止,我已编码: private class ImageLine extends JComponent { java.awt.Point p1,p2; BufferedImage show; ArrayList shapes = new ArrayList(); int flag = 0; Color color = Color.ORANGE; public ImageLine(BufferedImage img) { show = img; setPreferredSize(new Dimension(img.getWidth(), img.getHeight())); this.addMouseListener ( new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { p1 = e.getPoint(); } @Override public void mouseReleased(MouseEvent e) […]

Java NetBeans IDE – JPanel中的动画闪烁

我目前正在学习NetBeans中的Java动画和图形。 我决定在JPanel开始一个简单的球运动。 我在修复闪烁的闪烁问题时遇到了一些问题。 我看过很多论坛,但大多数是使用Double Buffering的AWT,但我发现SWING组件不需要Double Buffering。 我试过 – 使用repaint()和。 clearRect() 。 在2我发现使用。 clearRect()给了我更好的结果,但不是无缝的无闪烁动画。所以我想知道是否有更好的方法来消除闪烁。 这是我的代码: public class NewJFrame extends javax.swing.JFrame { int x; int y; int xspeed = 1; int yspeed = 1; int width; int height; Graphics g; /** * Creates new form NewJFrame */ public NewJFrame() { initComponents(); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { […]

使用未知行数的文本创建图像

我想将一串文本转换为图像。 问题是,如果文本比图像的长度宽,我想要文本换行,并且图像的高度要动态resize以完全适合文本,这样我就知道文本占用了多少空间。 我在Java工作,我尝试了几件事: 在JPanel中呈现HTML并保存为BufferedImage。 这里的问题是我使用的大多数css被JPanel忽略,图像无法使用。 使用ImageMagick和img4Java。 这个解决方案的两大失败是我需要安装命令行工具,这是我在服务器上无法做到的。 第二个是我无法轻松将图像转换为缓冲图像,以便在应用程序的其余部分中使用。 有没有人知道在Java中这样做的方法? 谢谢!

绘制点网格

我是图形编程的新手。 我正在尝试创建一个允许您绘制有向图的程序。 首先,我设法绘制了一组矩形(代表节点),并通过覆盖Java中的paint方法来实现平移和缩放function。 这一切似乎都运行得相当好,而没有太多的节点。 我的问题是在尝试绘制点网格时。 我首先使用了一小段测试代码,使用两个嵌套的for循环覆盖了一个点网格: int iPanX = (int) panX; int iPanY = (int) panY; int a = this.figure.getWidth() – iPanX; int b = this.figure.getHeight() – (int) iPanY; for (int i = -iPanX; i < a; i += 10) { for (int j = -iPanY; j < b; j += 10) { g.drawLine(i, j, […]

如何创建专业定制的Java Swing Gui?

我最近被赋予了完全修改我公司的一个软件Gui外观的任务。 到目前为止,我只做了基本的外观改变。 主要通过一些GridBagConstraints处理将Gui从默认的Metal L&F升级到System L&F。 但这项任务有所不同: 我们有一位平面设计师绘制了所需的设计: 我知道如何创建这种function 。 我可能会使用双JTabbedPanes或只是添加Jpanels。 我的问题是如何将图形与gui对象合并。 为了制作一个看起来像这样的Java Swing应用程序,我应该问设计师给我什么 – 使用圆角标签和标签面板颜色的合并? 当我现在给出的所有内容都是上面的这张图时,我怎样才能让JPanels或JTabbedPanes穿上这件华丽的服装呢?

如何在SWTcanvas上绘制选择框?

我有一个带有一些图像的SWT Canvas。 我希望我的用户通过单击,按住鼠标左键并通过移动鼠标打开选择框来选择图像的一部分。 作为视觉反馈,我想将选定的矩形显示为我图像上的透明覆盖。 问题是我不知道如何最好地实现这一目标? 有人可以给我一个暗示吗?

如何让多个Threads绘制到AWT组件上?

编辑:解决了,看下面我的解决方案。 首先,这是我的第一个问题,所以如果我犯了任何错误,请告诉我。 我正在尝试用Java编写Mandelbrot分形程序,用于培训目的。 我想要的所有function的理想选择是Fractalizer( http://www.fractalizer.de/en/ ),但就目前而言,我会对在屏幕上绘制Mandelbrot Set的程序感到满意(而不是例如,将其写入图像文件)。 当然,我希望程序快速,所以我认为我可以将计算分成多个线程来利用我的多核处理器; 例如,在四核系统上,图像将被分成2×2 = 4个图像,每个图像由单独的线程计算。 所有这些线程都会传递一个Graphics对象,并在计算像素时绘制像素。 我的第一次尝试是让线程在BufferedImage.getGraphics()上绘制,并且只要图像没有完成,paint()方法就会不断调用repaint(): g.drawImage(tempImg, 0, 0, null); if (waiterThread.isAlive()) { try { Thread.sleep(10); } catch (InterruptedException e) { // do nothing } repaint(10); } (waiterThread一个接一个地连接所有计算线程,所以只要waiterThread存活,至少有一个计算线程尚未完成。) 这有效,但由于经常重新绘制,会在canvas上造成难看的闪烁。 然后,通过一个小的测试程序,我发现Graphics.draw *任何*在paint方法返回之前立即在屏幕上绘制,所以我当前的方法如下: 一个GridLayout包含2×2的面板(在<4核系统上,1×1)MandelbrotCanvas对象 每个MandelbrotCanvas对象将在第一次paint()调用时初始化一个计算Thread,将其自己的Graphics对象传递给它(实际上,我使用的是一个自定义的GroupGraphics类,它将一个Graphics调用传递给多个图形,以“备份”将图像转换为BufferedImage.getGraphics(),但这并不重要),并启动计算线程。 面板将在其paint()方法中从每个MandelbrotCanvases中获取计算线程并加入()它们。 不幸的是,这只会产生黑屏。 仅在计算完成时,才会显示图像。 将多个线程绘制到一个组件上的正确方法是什么? 编辑: 我不知道的事情:只允许事件调度线程在AWT组件上绘制(粗略说出),这意味着上面的最后一种方法不可行 – 显然,它应该抛出exception,但我没有’得到一个。 我的解决方案是使用第一种方法 – 将图像绘制到BufferedImage上并将其绘制到Canvas上 – 唯一的修改是我重载update()方法以调用paint()方法而不清除绘制区域 : public […]

Java Graphics:每次重新绘制时,我都会得到一个黑色闪光

我是java绘图函数的新手,但我有一个我构建的示例直方图。 点击按钮,我用随机值重建直方图。 但是,每当我按下按钮进行重新绘制时,我会在重绘之前获得黑色闪光。 我记得听说这很常见,修复与缓冲有关。 任何建议?

带有Timer的Java变色图形

我想画一张每秒两次变色的光盘。 磁盘在DrawPanel上绘制,它延伸了JPanel,在main方法中,DrawPanel被添加到框架中。 对于颜色变换,我使用一个计时器,当我试图改变主方法中的DrawPanel的背景时(我注释掉了)。 有人可以告诉我为什么它不适用于Graphics g对象或任何其他建议吗? 我只是从main方法复制代码并将其添加到paintComponent()方法中,但在这里它不起作用。 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class DrawPanel extends JPanel{ public GridBagLayout gbl; //position and dimension int x = 0, y = 0, width = 200, height = 200; public DrawPanel(){ repaint(); } public DrawPanel(GridBagLayout gridBagLayout) { this.gbl = gridBagLayout; […]