簡體   English   中英

C中的圖形庫

[英]Graphics library in C

我想知道是否有任何易於使用的C自由圖形庫? 它用於繪制2d和3d圖形,然后保存到文件。 它在Linux系統上,現在系統上沒有gnuplot。

或者只是更簡單地切換到另一種語言,如果是這樣,哪一個很容易學習?

我喜歡開羅圖書館 它有一個很好的C接口,它可以輸出多種格式。

要在CI中繪制2D和3D圖形,建議使用庫DISLIN 您可以在這里那里看到示例。

代碼非常易於使用,並提供了很好的結果。

這個問題有點模糊,“圖形”是一個廣闊的領域。 你可以使用普通的SDL ,但也可能被認為是“太低級別”。 您需要提供更多要求。

雜亂 以下是關於頁面的幾個片段:

“Clutter是一個開源軟件庫,用於創建快速,視覺豐富,可移植和動畫的圖形用戶界面。”

“Clutter的目標是非特定的 - 它沒有實現特定的用戶界面風格,而是提供了豐富的通用基礎,有助於快速輕松地創建針對特定需求量身定制的更高級別的工具包。”

“在C語言中開發,具有Perl,Python,C#,C ++,Vala和Ruby的語言綁定。”

“通過位置,分組,透明度,縮放,剪切和旋轉在3D空間中操作的分層2D界面元素的場景圖。”

我自己沒有嘗試過,但如果你正在尋找可以玩的東西,它似乎很靈活。

當我需要簡單的東西時,我已經使用過netpbm格式了幾次。

這就是我發現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;
}

我推薦Qt GUI工具包,加上開源QwtPlotQwtPlot3D 它是用C ++實現的,易於使用,可擴展,免費...

大多數人使用gd庫從C渲染,但你必須實現“數學繪圖”部分。

看看PGPLOT。 它雖然陳舊,但效果很好,應該在回購中。 PLPLOT也是一種選擇,它是相似的和更新的,也應該在回購中隨時可用。 他們都非常強大,可以做你指定的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM