Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在现代linux中轻松地绘制图形?_Java_C_Linux_Graphics_Turbo C++ - Fatal编程技术网

Java 如何在现代linux中轻松地绘制图形?

Java 如何在现代linux中轻松地绘制图形?,java,c,linux,graphics,turbo-c++,Java,C,Linux,Graphics,Turbo C++,下面是一个在过去可以编写的C程序的示例: #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> void main() { int gd=DETECT, gm; initgraph(&gd, &gm, "c:\\turboc\\bgi"); circle(200,100,150); getc

下面是一个在过去可以编写的C程序的示例:

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void main()
{
    int gd=DETECT, gm;

    initgraph(&gd, &gm, "c:\\turboc\\bgi");
    circle(200,100,150);

    getch();
    closegraph();
}
#包括
#包括
#包括
#包括
void main()
{
int gd=检测,gm;
initgraph(&gd,&gm,“c:\\turboc\\bgi”);
圆圈(200100150);
getch();
closegraph();
}
我想这是MSDOS下的turbo C。它可以在屏幕上绘制图形,并且可以轻松地进行扩展,以生成快速的动画图形,如xscreensaver hacks中的图形


我如何在ubuntu上用gcc编写等价的代码?可以用Java完成吗?

您需要了解,在Linux上,图形通常是通过Java完成的(将来可能会成为竞争对手)

然后您应该使用一些X11工具包。如果你想在C,考虑或。但是如果你知道C++,我会推荐(阅读它的能力)。 您可以在大约一百行中找到一些短Qt、Gtk或SDL示例程序

Java至少有一个功能

请注意,Linux本质上是一个多任务系统。因此,您需要运行几个图形程序。换句话说,您需要几个窗口(以及一个窗口或桌面管理器)。因此,您需要一个事件循环,并且需要注意调整大小和/或重叠的窗口。因此,复杂性比上个世纪的TurboC时代要大得多


另一方面,考虑让你的应用程序成为一个专门的HTTP服务器(并在HTML5中对图形进行编码),例如作为一个C HTTP服务器库。

< P> OK,关于基础知识的几句话:

  • 您提供的示例使用了名为BGI-Borland Graphics Interface的库,这是MS DOS时代非常古老的东西
  • GCC本身只是一个编译器——您必须搜索支持绘图的库
  • 在Linux上,我们使用了几个GUI工具包,但现在只有Gtk和Qt是相关的
  • 如果您想要低级图形库,可以查看Allegro()或SDL()
  • 但说真的,我认为你看错方向了。您应该关注使用现代工具包(Gtk、Qt)、现代语言(C++、C#、Java、Python等)和OpenGL进行“特效”的现代事件驱动GUI编程 #包括 /*gcc-std=gnu99-o圆c-lX11*/ int main(int argc,char*argv[]) { /*连接到X服务器并创建一个窗口*/ Display*dpy=XOpenDisplay(getenv(“Display”); 窗口w=XCreateSimpleWindow(dpy,默认根窗口(dpy), 100, 100, 640, 480, 1, 黑色像素(dpy,默认屏幕(dpy)), 白像素(dpy,默认屏幕(dpy)); /*举起来等着*/ XSelectInput(dpy、w、StructureNotifyMask); XMapRaised(dpy,w); for(XEvent e;(e.type!=MapNotify); XWindowEvent(dpy、w、StructureNotifyMask和e)); /*为窗口中的图形创建图形上下文*/ gcg=XCreateGC(dpy,w,0,NULL); /*画圈*/ XDrawArc(dpy,w,g,2001001501500360*64); XFlush(dpy); /*等待按键*/ XSelectInput(dpy、w、按键释放掩码); 用于(XEvent e;(e.type!=按键释放); XWindowEvent(dpy、w、按键释放掩码和e)); /*清理*/ XDestroyWindow(dpy,w); XCloseDisplay(dpy); }
    gcc中的等价物是什么意思?我的意思是,我可以简单地画一些东西吗,还是我需要花三页的代码与X协商许可?@JohnLawrenceAspden您在Linux上对
    graphics.h
    的研究中发现了什么?下面是JavaFX的演示。您必须首先安装JavaFX,但一旦它运行,您就可以查看并使用演示代码。只是一句话:BGI图形根本就不是快速的。对于低分辨率的图形,这是可以的,但即使这样,它也比汇编中编写的相同图形例程慢得多。
    #include<X11/Xlib.h>
    #include<stdlib.h>
    
    /* gcc -std=gnu99 -o circle circle.c -lX11 */
    
    int main (int argc, char *argv[])
    {
    
      /* connect to the X server and make a window */
      Display *dpy = XOpenDisplay (getenv ("DISPLAY"));
      Window w = XCreateSimpleWindow (dpy, DefaultRootWindow (dpy),
                                      100, 100, 640, 480, 1,
                                      BlackPixel (dpy, DefaultScreen (dpy)),
                                      WhitePixel (dpy, DefaultScreen (dpy)));
    
      /* raise it and wait */
      XSelectInput (dpy, w, StructureNotifyMask);
      XMapRaised (dpy, w);
      for(XEvent e; ( e.type != MapNotify );
          XWindowEvent (dpy, w, StructureNotifyMask, &e));
    
      /* create a graphics context for drawing in the window */
      GC g = XCreateGC (dpy, w, 0, NULL);
    
      /* draw a circle */
      XDrawArc(dpy,w,g,200,100,150,150,0,360*64);
      XFlush(dpy);
    
      /*wait for key press*/
      XSelectInput (dpy, w, KeyReleaseMask);
      for(XEvent e; ( e.type != KeyRelease ); 
          XWindowEvent (dpy, w, KeyReleaseMask, &e));
    
      /*clean up*/
      XDestroyWindow( dpy, w );
      XCloseDisplay (dpy);
    }