.NET 用のグラフ作成ツール。 コンパイラ、ユーティリティ、グラフィックス ライブラリ

24.04.2019 モニター

Code::Blocks は、無料のクロスプラットフォーム開発環境です。 Code::Blocks は C++ で書かれており、wxWidgets ライブラリを使用します。 オープン アーキテクチャを備えているため、プラグインを通じて拡張できます。 プログラミング言語 C、C++、D をサポートします (制限あり)。

ConTEXT - 無料のマルチウィンドウ テキストエディタ C/C++、Delphi/Pascal、FORTRAN、80x86 アセンブラ、Java、JavaScript、 ビジュアルベーシック、Perl/CGI、HTML、SQL、Python、PHP など。 エディターは外部ツールに接続して、ソース コードをコンパイルまたは解釈できます。

Eclipse は、モジュール式クロスプラットフォーム アプリケーションのための無料の統合開発環境です。 Eclipse Foundation によって開発およびサポートされています。

Eclipse プラットフォームに基づく最もよく知られたアプリケーションは、さまざまな言語 (Java、C/C++) でソフトウェア開発を行うためのさまざまな「Eclipse IDE」です。

GTK+ (GIMP ToolKit の略) は、インターフェイス要素のクロスプラットフォーム ライブラリであり、使いやすい API を備えており、Qt と並んで、今日 X Window System で最も人気のある 2 つのライブラリのうちの 1 つです。
もともと一部であること グラフィックエディタ GIMP は別のプロジェクトに発展し、顕著な人気を博しました。 GTK+ は、GNU LGPL の条件に基づいて配布されるフリー ソフトウェアであり、ライブラリを使用してフリー ソフトウェアとプロプライエタリ ソフトウェアの両方を作成できます。 GTK+ は、 GUI GNU プロジェクト。

Konva.js は、HTML5 キャンバス要素に対話性を追加する JavaScript ライブラリです。 さまざまな図形をキャンバスに追加し、それらの図形に対してイベント ハンドラーを使用し、これらの図形を移動したり、スケールを変更したり、相互に独立して回転したりできます。 こうして支持されるのです ハイパフォーマンスオブジェクトが多数ある場合でも、アニメーションを作成できます。

Lazarus は無料の開発環境です ソフトウェア Object Pascal 言語の Free Pascal コンパイラ用。 統合開発環境は、Delphi のような環境でクロスプラットフォーム アプリケーションを開発する機能を提供します。 の上 この瞬間唯一のツールです 急速な発展アプリケーション (RAD)。これにより、Delphi プログラマーは Linux (およびその他の Windows 以外) システム用の GUI アプリケーションを作成できます。

MinGW (英語 ミニマリスト GNU) Windows用)、以前は mingw32、 - コンパイラ、ネイティブ ソフトウェアポート GNU コンパイラ コレクション (GCC) の下 マイクロソフトウィンドウズ、無料で配布されるインポート ライブラリのセットとともに、 ヘッダーファイル Windows API用。 MinGW を使用すると、開発者はネイティブを作成できます マイクロソフトのアプリケーションウィンドウズ。 MinGW にはランタイム ライブラリ拡張機能が含まれています マイクロソフトビジュアル C++ は C99 機能 (最新の C プログラミング言語標準) をサポートします。

PascalABC.NET システムは、ロシアとドイツのプログラマーが共同開発したもので、ロシアおよび近隣諸国の多くの中等教育機関および高等教育機関で、情報技術分野の学生を教えるための主要言語として積極的に使用されています。

以下では、2D 財務チャートとテクニカル分析指標を生成するためのライブラリを開発するために使用できる C/C++ のライブラリについて検討します。

主な要件は次のとおりです。

  • C/C++ API の可用性。
  • 例を含む適切なドキュメントの入手可能性。
  • 実験用の Python パッケージの利用可能性。
  • 比較的 高速 30000 行を超える描画時の Python パッケージのパフォーマンス。
  • フォントの正しい動作、ピクセル フォントのサポート、およびアンチエイリアスを無効にする機能。

考慮すべき要約:

  • Python で作業するための Pillow - 高速でドキュメントが利用可能。
  • gMagick++ または Magick++ for C/C++ 拡張機能は高速であり、ImageMagick の Web サイトに十分に文書化されています。
  • ベクター グラフィックスを操作するための SKIA または Cairo。

グラフィックスマジック (Magick++)

ImageMagick ライブラリの GraphicsMagick ライブラリの C++ フォークの拡張機能。 ライブラリを使用すると、絵を描いたり加工したり、さまざまな形式で保存したりできます。 親 (IMagick) とは異なり、開発者はパフォーマンス、最適化、セキュリティに重点を置いています。

PgMagick Python パッケージは、GraphicsMagick と ImageMagick の両方で動作します。 このライブラリは、Python-Boost を使用して Python に統合されます。 Wand-Py とは異なり、動作は数十倍高速ですが、同時に Python のドキュメントが貧弱です (Magick++ C++ 拡張機能のドキュメントですべてを探す必要があります)。

ImageMagick (Magick++)

人気のある ImageMagick (IMagick) ライブラリの C++ 用拡張機能。 ライブラリを使用すると、絵を描いたり加工したり、さまざまな形式で保存したりできます。

Wand-Py は Pillow (フォーク) に比べて非常に遅いです。 標準ライブラリ Python の PIL)。 フォントに関する問題を解決できませんでした (アンチエイリアスとぼかしを追加)。

カイロ

レンダリング用に C で書かれたライブラリ ベクターグラフィックス。 2D画像を描画するための関数が含まれています。 (フォーラムで) 指摘されている利点は、ドキュメントが充実していることです。 SKIAよりも動作が遅いです(インターネット上に比較があります)。

スキア

レンダリング用に C++ で書かれたグラフィックス ライブラリ ベクターグラフィックス。 で使われる グーグルクローム、Chrome OS、 モジラ Firefox、アンドロイド。 Google によるサポート。 ドキュメントは少ないですが、例はあります。 カイロに比べて動作が早いです。

AGG(アンチグレイン)

図書館 ラスターグラフィックス C++ で書かれています。 最新バージョン 2006年に発売されました。 このライブラリが Python (および Pillow) の PIL の基礎であるという推測があります。

C++ には、Python や他の多くのプログラミング言語と同様、組み込みの GUI ツールが付属していません。 これは、PC オペレーティング システムがこのタイプのインターフェイスなしで開発された 80 年代半ばまで当てはまり、Windows やさまざまな Apple オペレーティング システムが標準になり、イベント駆動型プログラミングが追いつくまでにさらに数年かかりました。

30 年前、すべての I/O は キャラクターディスプレイ。 これは、最初のグラフィック ライブラリが登場した 90 年代初頭までそうでした。 それ以来、Windows に比べて Mac OS (および程度は低いですが Linux) の重要性が高まっており、コードを書き直すことなく 3 つのプラットフォームすべてで実行できるソフトウェアの作成に投資することがより魅力的になってきました。

クロスプラットフォーム ツールがなければ、I/O 処理とユーザー インタラクションを処理するためだけに、基本的に他のプラットフォーム用にコードを書き直す必要があります。 同時に、グラフィックスの動作はオペレーティング システムごとにまったく異なります。 クロスプラットフォーム ツールは、これらの違いや癖からある程度保護してくれます。

移植する必要がないかもしれません。 Windowsアプリケーション Mac または Linux 上で実行できますが、少なくともそれができることがわかります。 このリストでは、C++ で記述され、現在も開発が進められている 5 つのクロスプラットフォーム GUI 開発ツールを紹介します。 私が選んだ 5 つは、Qt、wxWidgets、JUCE、CEGUI、CEF です (その他のいくつか、特に GTK、MFC、Cocoa は、完全にクロスプラットフォームではないため、リストには含まれていません)。

Qt は最も古いフレームワークの 1 つで、現在 21 年前です。 以前所属していた ノキア社、現在の所有者 - フィンランドの会社 Qtカンパニー。 プラットフォームは無料のオープンソース ソフトウェアとしてライセンス供与されています ソースコード、Indie Mobile、Professional、Enterprise バージョンも月額 79 ドルから利用できます。

この古いフレームワークは、独自のフレームワークで再発明されました。 新しいバージョン、どこでも使われている Qt 5 から モバイルアプリケーション自動車や医療機器まで。 その利点の 1 つは、ユーザー インターフェイスを作成できるウィンドウ システムです。 追加機能、サードパーティプロバイダーからのチャート、データ視覚化、地図の表示など。 Qt バージョン 5 では、タッチをマウスやキーボードの操作と同じ方法で処理できるようになり、次のことを追加できます。 仮想キーボード X11 と Windows で。 KDE Linux では、Qt がネイティブ GUI ライブラリであるため、KDE ​​プラットフォーム用に開発している場合は、Qt を検討する必要があります。


開発者の Julian Smart は 24 年前に wxWidgets を作成し (これは Qt よりも古いことになります)、現在もそのメイン開発者です。 このライブラリは多くの点で Qt に似ていますが、プログラムが実行されているオペレーティング システムのネイティブ グラフィック要素を使用するため、これを好む開発者もいます。 これにより、アプリがよりネイティブに見えるようになります。 たとえば、Windows では Windows グラフィックスが使用されます。

(比較すると、Qt は各プラットフォームで独自のウィジェットをレンダリングしますが、スクロールバーとボタンをレンダリングする低レベルのコードを使用することで、できるだけプラットフォームに近づけようとします。)

ジュース

このクロスプラットフォームのオープンソース ライブラリは、Qt と同様のライセンスを使用します。 彼女は、クロスプラットフォームのオーディオ、インタラクティブ、組み込み、グラフィックス アプリケーションに重点を置いています。

元々は英国の開発者 Jules Storer によって開発されましたが、オーディオ製品を開発する Raw Materials Software によって買収されました。 その結果、JUCEは、 多額の 機能性元々はオーディオ アプリケーションを作成するために開発されたものであるため、オーディオを扱う場合に便利です。

JUCE ライブラリには他にも多くのものが含まれています グラフィック要素 ユーザーインターフェース、グラフィックス、オーディオ、XML および JSON 解析、ネットワーク、暗号化、マルチスレッド、および ECMAScript を模倣した構文で動作する組み込みインタープリターを備えています。 これにより、サードパーティ ライブラリの必要性と、サードパーティ ライブラリが引き起こす可能性のある依存関係の問題が軽減または排除されます。 アップデートほど最悪なものはない サードパーティツール、プロジェクトのビルドが中断されます。

JUCE には、Xcode プロジェクト、Visual Studio プロジェクト、Linux Makefile、 Android ビルド Ant プロジェクトと CodeBlocks プロジェクト。

セギ

Crazy Eddie GUI は 2003 年から開発されており、バージョン 1.0 が 2020 年までにリリースされる可能性は十分にあります。 現行版 0.87。 このリストにある他のものと同様に、Windows、Linux、Mac 上で実行され、64 ビット システムと 32 ビット システムの両方をサポートします。 このリストにある他の GUI ライブラリとは異なり、ゲーム開発に焦点を当てていますが、前述したように、開発者にウィジェット (ボタン、ドロップダウンなど) のパックを提供するため、ゲーム アプリケーションだけに限定されません。

ほとんどのゲームでは、すべてのメニューとカスタマイズ画面に GUI が必要で、これらは DirectX や OpenGL などのプラットフォームでレンダリングされます。 スキンをサポートしているため、ゲームの美しさに合わせてカスタマイズできます。

CEGUI設定も広く使用されています XMLファイル。 これらは、スキンをカスタマイズするだけではありません (つまり、コントロールがどのように見えるか、一般的なものなど) カラースキームなど)、アニメーション、画像、レイアウト、ゲーム データ ファイル管理スキームなど、その他すべてのもの。 これらはすべて XML に依存しています。

CEF

Chromium Embedded Framework は、Chromium ベースのブラウザを他のアプリケーションに埋め込むためのシンプルなフレームワークです。 これにより、スタンドアロン アプリケーションを作成するために設計された、リストにある他の C++ ライブラリとは区別されます。 聞いたことがないかもしれませんが、ドキュメントによると、多くの製品には 1 億を超える CEF インスタンスが組み込まれています。 CEF はすでに 8 年が経過しており、すでにバージョン 3 に達しています。

への統合 Chromeブラウザ JavaScript へのアクセス、WebGL 経由の GPU アクセラレーション、オフスクリーン メモリ レンダリング、および近日中に音声入力が可能になります。

結論

これらのライブラリはすべて C++ で記述されていますが、利用可能な言語バインディングが多数あるため、どのプログラミング言語を使用できるかを確認する価値があります。 wxWidgets はこの点で特に優れており、Qt も同様です。Qt はいくつかの特殊なツールで使用されます。 オペレーティングシステムああ、自動車用ソフトウェアも。 おそらく有料サポートのおかげで、Qt は企業でより人気があるようですが、学者や独立系開発者は、無料で Qt に準拠しているため、wxWidgets を好みます。

Qt と wxWidgets はどちらも多くの同じ領域をカバーしており、個人の好みに応じてどちらを選択してもよいでしょう。 どちらのフレームワークにも、開発を簡素化するためのサードパーティ ツールが多数含まれています。

少し前まで、私は、.NET 用のグラフィックスのレンダリングを可能にするソリューションを見つけるという、些細なタスクに直面しなければなりませんでした。 線形グラフにしか興味がなかったので、すぐに予約させてください。 やり直しのきっかけとなった障害はすでに解決されています 既存のソリューション(これらは rdlc レポートに組み込まれたグラフです)、パフォーマンスは高かったです。 一般に、望ましいソリューションには次の要件が提示されています。

  1. この最適化を気づかれないようにしておく必要があります。 エンドユーザーしたがって、ソリューションは、最終的に以前のソリューションと同じになるように、高度にカスタマイズ可能である必要があります。
  2. 迅速に作業します (もちろん、ユーザーは待つことを好みません)。
  3. できれば無料またはオープンソースであることが望ましいです。 買わない 大問題、私を素晴らしいと思ってください 有料ソリューション, しかし、オープンソースから始める方が良いでしょう。
何が行われたのでしょうか?
グーグルで調べたところ、この問題を解決するには非常に多くのオプションがあり、それらはすべて多くの点 (コミュニティのサイズ、速度、利便性) において大きく異なります。 ソリューションを選択する過程で、8 つの無料オプションがテストされました。


最初に、できるだけ多くのオプションを 1 か所に集めてパフォーマンスをテストする必要があると判断しました。その後、完了した作業をゴミ箱に捨てるのはもったいないと考えました。 そこで、この記事をフォーマットして、何が起こったのかを GitHub に投稿することにしました。 したがって、必要に応じて、各ソリューションを自分用にカスタマイズし、すぐにテストできます。 個人的には、最初のこのような記事を本当に見逃していました。 おそらくソースは達人を笑顔にするでしょうが、.NET と ASP を詳しく調べている初心者にとっては、間違いなく非常に役立つでしょう。
作業速度を比較するために、デフォルトのグラフィック設定が使用され、出力画像の解像度が示されてそれに供給されます。 定量ポイント。 各ソリューションは数回実行され、次のように実行されます。 実際の速度平均がとられます。 繰り返しになりますが、これは非常に主観的なものなので、より良いアプローチを提案できるのであれば、ぜひ聞いてみたいと思います。
私のPCでは( インテルCore I5 3.10 GHz、8gb RAM、Windows 7 x64) では、次の動作速度分布が得られました。

解決
反復回数
合計時間 (秒)
反復あたりの平均時間 (秒)
1
ディスリンチャート
5
1.9071907
0.38143814
2
ゼッドグラフ
5
2.750275
0.550055
3
Nプロット
5
3.1833183
0.63666366
4
Web チャート コントロール
5
5.130513
1.0261026
5
Microsoft チャート コントロール
5
6.8456845
1.3691369
6
オキシプロット
5
7.0067006
1.40134012
7
オープンマインドなプロット
5
8.257
1.6514
8
Google シャープ チャート
5
9.8049804
1.96099608

入力パラメーター (画像解像度、グラフ上のポイント数、PC パラメーター、インターネット速度、ムーンフェイズなど) が異なると結果は若干異なるため、自分でパフォーマンスをテストできます。
機能やカスタマイズ オプションについては、意図的に詳細な比較はしませんでした。これはかなり主観的な情報であり、 特定のタスク。 必要に応じて、誰でも 30 分かけてソリューションのアーキテクチャを調べ、特定の要件を満たすようにカスタマイズするのがいかに簡単かを理解することができます。
他に知っている人がいれば 無料のソリューション記事に記載されていない .NET グラフについては、コメントに書いていただければ追加してみます。

ある時点で、どうすればできるのかと考えました ディスプレイグラフィックス C++を使用する(と)。 あんなに人気のあるフレームワークは使いたくなかった ビルダーまたは MS ビジュアルウィンドウライブラリを使用します。 必要だった ただの図書館のために 仕事単純 グラフィックス V コンソール.

インターネットやフォーラムでのリクエストから判断すると、この質問は私だけでなく生じました。

数日間答えを探し続けた後、 この質問, これらのライブラリを厳選して用意しました。 おそらくそれらはあなたにも役立つでしょう。

図書館一覧

1.WinBGIm- ボーランドからの「古い」ライブラリを移植 ウィンドウズ。 元々はグラフィックスを表示するために開発されました。 ドス。

2. カイロ- 下のライブラリ GNUライセンス、多くのプログラミング言語でサポートされています( Delphi、Factor、Haskell、Lua、Perl、PHP、Python、Ruby、Scheme、Smalltalk など。)。 多数のオペレーティング システムもサポートしています。

3.SDLは、GNU ライセンスに基づくクロスプラットフォームのマルチメディア ライブラリであり、単一の機能を実装します。 ソフトウェアインターフェースグラフィック サブシステム, デバイスそして 手段 入力のために 広い範囲プラットフォーム。

このライブラリは、クロスプラットフォームのマルチメディア プログラム (主にゲーム) を作成するときに積極的に使用されます。 多数のプログラミング言語でサポートされています( C、C++、C#、VB.NET、D、Ada、Vala、Eiffel、Haskell、Erlang、Euphoria、Java、Lisp、Lua、ML、Pascal、Perl、PHP、Pike、PureBasic、Python、Ruby) およびオペレーティング システム ( Linux、Microsoft Windows、Mac OS X、iOS、Android).

から 興味深い機能ライブラリを使用すると、作業が可能になります ジョイスティック, のCD-ROMそして 通信網。

4. SFML- シンプルで高速なクロスプラットフォーム マルチメディア ライブラリ。次の言語で利用できます。 C++、C、D、Java、Python、Ruby、OCaml、.Net、Go。オブジェクト指向です アナログ SDL。 との作業が可能になります オーディオ, 通信網そして ウィンドウズ.

5. アレルギー— 2D グラフィックス、オーディオ ファイル、ウィンドウ、 ファイルシステム、3Dグラフィックス。 さらに、このライブラリは、固定小数点、浮動小数点、行列数値を操作するための追加関数を提供します。

元々は Atari のゲームを開発するために作成されました (Allergo の略) Atari の低レベル ゲーム ルーチン)、このライブラリは現在、次の言語でサポートされています。 C, C++, パスカル、Python、Lua、Scheme、D、Go、Ada、Lisp、Mercury、Perl、Scheme。次のプラットフォームがサポートされています。 ウィンドウズ, マックOS, ユニックス- 同様のシステム、 アンドロイドそして iOS.

6. スキア— コンパクトなグラフィック ライブラリ。 Google Chrome、Chrome OS、Chromium OS、Mozilla Firefox、Android (最大 3.0)、Firefox OS で使用されます。 崇高なテキスト 3. 図書館の取り組み そして パイソン.

7. OpenGL (または 過剰)— 上記の一部のベースとなるライブラリ。 リストの最後に記載したので... 多くの人がそれについて聞いたことがあるでしょう、そしてそれは十分に強力です 単純な作業 2D グラフィックスと同様ですが、それを実装できます。 より正確に言えば、 OpenGLこれ 仕様、それらの。 インターフェイスを説明する一連のルール、および 開発者 装置(ビデオカード)それに基づく 発展する 図書館。 実施日 大量オペレーティング システムとプログラミング言語。