实现java.awt.Graphics类

实现java.awt.Graphics类,java,graphics,Java,Graphics,我目前正在为LCD编写一个库。我选择用Java扩展Graphics类,这样用户可以更方便地在LCD上绘图 然而,编写/重写这些方法是非常费心的工作。我刚刚使用Bresenham的线条算法成功地实现了drawLine(),并通过用黑白填充像素成功地实现了fillRect(),clearRect()。但它似乎差点杀了我 我已经通过图形类了解了: 嗯,这是抽象的。没有任何东西是通过XD实现的 也没有希望和秋千一起。实现似乎依赖于平台 是否有图形类的任何源代码,以便我可以查看实现 或者这真的是一项愚蠢的

我目前正在为LCD编写一个库。我选择用Java扩展
Graphics
类,这样用户可以更方便地在LCD上绘图

然而,编写/重写这些方法是非常费心的工作。我刚刚使用Bresenham的线条算法成功地实现了
drawLine()
,并通过用黑白填充像素成功地实现了
fillRect(),clearRect()
。但它似乎差点杀了我

我已经通过图形类了解了: 嗯,这是抽象的。没有任何东西是通过XD实现的

也没有希望和秋千一起。实现似乎依赖于平台

是否有图形类的任何源代码,以便我可以查看实现


或者这真的是一项愚蠢的工作吗?

您将在完整的OpenJDK Java源代码树中找到
Graphics
类的各种实现,这些实现可以从OpenJDK官方网站获得。看看下载页面


无论您如何操作,实现一个新的
Graphics
类都将是一项艰巨的工作。但我不准备说这是一件“愚蠢”的事情。这取决于你为什么这么做;i、 e.努力是否“花得好”。只有你才能打那个电话。

这是一项相当愚蠢的工作

  • 已经完成了

  • 如果你在逐像素的基础上工作,那么你在错误的级别上工作

  • 出于性能方面的原因,这应该通过硬件加速来完成,尽可能使用openGL

  • 即使不是这样,也应该通过直接进入C并直接访问VRAM来完成,而不是在Java级别。将屏幕设置为黑色将成为对memset的一次调用


    • 我会在图形类的实现中放置一个图像。并使用getGraphics()获取图形,并将方法挂接到其中

      public SampleGraphics extends Graphics2D{
      
          private final Graphics2D g2d;
      
          private final BufferedImage buffImg;
      
          public SampleGraphics(String someargs){
              //Perform things...
              buffImg = .....
              g2d = buffImg.getGraphics();
          }
      
          @Override
          public Graphics create(){
              return g2d.create();
          }
      
          //...each method identical to the Graphics2D g2d
      }
      

      当你说“非常繁重的工作”时,从编写代码或性能方面来说,繁重是什么意思?令人精疲力竭,需要高度关注像素…你能说一个吗?抽象类帮不上忙,我想不起来。但是如果你下载完整的源代码,你会发现例子。(我现在使用的机器上没有副本。)库正在直接写入LCD帧缓冲区。而OpenGL在很大程度上是不可能的,因为LCD使用了另一种方法,用0,1填充像素。你听说过ev3dev项目吗?我使用的是带有ev3dev的LCD。然后我仍然不会从头开始,我会找到一个实现并改变像素写入。例如,我整晚都在看代码。我找不到修改像素写入的方法。
      RenderingEngine
      来自本机端(封闭源代码)。看来我得从头开始了。哦,我刚想了一个新方法。我想我可以扩展
      Graphics2D
      类,并使用
      BufferedImage
      中的
      getGraphics()
      方法,将所有方法挂接到Graphics2D类。你认为这是一个好主意吗?请不要这么说别人的想法“相当愚蠢”。