C中的图形库

时间:2009-11-09 15:25:35

标签: c graphics

我想知道是否有任何易于使用的C自由图形库? 它用于绘制2d和3d图形,然后保存到文件。它在Linux系统上,现在系统上没有gnuplot。

或者只是更简单地切换到另一种语言,如果是这样,哪一种很容易学习?

8 个答案:

答案 0 :(得分:5)

我喜欢Cairo library。它有一个很好的C接口,可以输出多种格式。

答案 1 :(得分:3)

要在C中绘制2D和3D图形,我建议使用库DISLIN。您可以看到示例herethere

代码非常易于使用并且效果很好。

答案 2 :(得分:2)

这个问题有点模糊,“图形”是一个广阔的领域。使用普通SDL可以获得相当远的结果,但也可能被认为是“太低级别”。您需要提供更多要求。

答案 3 :(得分:2)

Clutter。以下是关于页面的几个片段:

“Clutter是一个开源软件库,用于创建快速,视觉丰富,可移植和动画的图形用户界面。”

“Clutter的目标是非特定的 - 它没有实现特定的用户界面风格,而是提供了丰富的通用基础,有助于快速轻松地创建适合特定需求的高级工具包。”

“在C语言中开发,具有Perl,Python,C#,C ++,Vala和Ruby的语言绑定。”

“通过位置,分组,透明度,缩放,剪裁和旋转在3D空间中操作的分层2D界面元素的场景图。”

我自己没有试过,但如果你正在寻找可以玩的东西,它似乎很灵活。

答案 4 :(得分:2)

当我需要简单的东西时,我已经使用过netpbm格式了一段时间。

这就是我发现qsort()(在我的实现和提供的数据中)执行合并排序的方式!

qsort

源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define ARRAY_SIZE 20
#define MAX_VALUE 10

unsigned char arr[ARRAY_SIZE];

void print_array(const void *left, const void *right) {
  static int imgs = 0;
  int k, j;
  FILE *img;
  char fname[100];
  char rgb[100];

  if (++imgs > 9999) return;
  sprintf(fname, "img/img%04d.ppm", imgs);
  /* create image in "img/" directory */
  img = fopen(fname, "w");
  if (img) {
    fprintf(img, "P3\n%d %d\n255\n", ARRAY_SIZE, MAX_VALUE);
    for (j=0; j<MAX_VALUE; j++) {
      for (k=0; k<ARRAY_SIZE; k++) {
        int colour = 0;
        if (left && left == arr+k) colour = 2;
        if (right && right == arr+k) colour = 2;
        if (arr[k] == MAX_VALUE - j - 1) colour = 1;
        switch (colour) {
          default: sprintf(rgb, "%d %d %d", 255, 255, 255); break;
          case 1: sprintf(rgb, "%d %d %d", 0, 0, 0); break;
          case 2: sprintf(rgb, "%d %d %d", 255, 0, 0); break;
        }
        }
        fprintf(img, "%s\n", rgb);
      }
    }
    fclose(img);
  } else {
    perror("img fopen");
  }
}

int cmp(const void *left, const void *right) {
  const unsigned char a = *(const unsigned char*)left;
  const unsigned char b = *(const unsigned char*)right;

  print_array(left, right);
  if (a < b) return -1;
  if (a == b) return 0;
  return 1;
}

int main(void) {
  int k;
  unsigned int seed = 0; /* or time(0) */

  srand(seed);
  for (k=0; k<ARRAY_SIZE; k++) {
    arr[k] = rand() % MAX_VALUE;
  }
  print_array(NULL, NULL);
  qsort(arr, (size_t)ARRAY_SIZE, sizeof *arr, cmp);
  print_array(NULL, NULL);
  /* use imagemagick to convert group of files to .gif */
  system("convert -delay 0"
         " img/img*.ppm"
         " -loop 1 img/libc-qsort2.gif");
  /* remove .ppm files */
  system("rm img/" "*ppm"); /* ... my editor does not like a
                                   slash and a star together,
                                   even inside quotes */

  return 0;
}

答案 5 :(得分:1)

我推荐使用Qt GUI工具包,以及开源QwtPlotQwtPlot3D。它是用C ++实现的,易于使用,可扩展,免费......

答案 6 :(得分:0)

大多数人使用gd library从C渲染,但你必须实现“数学绘图”部分。

答案 7 :(得分:0)

看看PGPLOT。它虽然陈旧,但效果很好,应该在回购中。 PLPLOT也是一种选择,它是相似的和更新的,也应该在回购中随时可用。他们都非常强大,可以做你指定的事情。