2025/02/05 更新
この記事は、自作OS Advent Calendar 2017の 12/6 の記事として書かれました。
主に、ライブラリや仕様書のダウンロード・サイトやリポジトリなどの URL を集めてみました。この他の URL は、以下でブックマークを公開していますので、興味がある方は参照してみてください。
なお、本稿では C ではなく C++ で書かれたライブラリも含まれていますが、必要なら C で書き直したり、C で新規開発したりする必要があると考えています。プロジェクトで採用できないライセンスのライブラリしかない場合も、C で新規開発する必要が生じてきます。
和書だと参考になる書籍は少ないです。日本国内の事情としては、基盤となる技術というのは作ることよりも利用することがほとんどで、作っている人は海外の英文情報を参照しているからだと思われます。
- グラフィクスの仕組み
- GUIライブラリの仕組み ―ソフトウェア設計のケーススタディ―
- 組み込みGUI(ウィンドウ・システム)環境の設計と実装
- フルスクラッチによるグラフィックスプログラミング入門
- 実践コンピュータグラフィックス ―― 基礎手続きと応用 ―― 日刊工業新聞社 (1987/02)
- 2&3次元グラフィックス・ソフトの基礎と応用―パソコンによるコア・システムの実現とその活用法 (I/F BOOKS) CQ出版社 (1984/10)
- 2Dグラフィックスのしくみ ――図解でよくわかる画像処理技術のセオリー
- Androidを支える技術〈Ⅰ〉──60fpsを達成するモダンなGUIシステム
組み込み向けなどのコンパクトな GUI ライブラリの存在は確認したものの、HiDPI(4K などの高解像度)への対応が可能なのかは未確認です。新規開発が必要になるかもしれません。また、HTML のレンダリングは別途、検討したいと考えています。
- Immediate-Mode-UI/Nuklear: A single-header ANSI C immediate mode cross-platform GUI library
- SL-RU/MakiseGUI: Graphics and GUI library for embed systems.
- lc-soft/LCUI: A simple GUI library, it is written in C, support XML and CSS.
- xamarin/flex: Flex is a flexible box layout system written in C, designed to be easy to consume from other languages
- littlevgl/lvgl: Embedded graphics library with transparency, animations and anti-aliasing with NO Double buffering.
文字コードの検出・変換・Unicode 関連の処理を行うライブラリです。
- google/compact_enc_det: compact_enc_det - Compact Encoding Detection
- International Components for Unicode - Wikipedia
- ICU - International Components for Unicode - Downloading ICU
フォントと、フォントを描画するライブラリです。
- Google、オープンソースフォント「Noto」がUnicode標準をフルサポートしたことを明らかに - 窓の杜
- notofonts/notofonts.github.io: Distribution site for Noto fonts
- The FreeType Project
日本語組版等についての文書や、Unicode 文書のレイアウトを処理するライブラリです。
- Requirements for Japanese Text Layout - 日本語組版処理の要件(日本語版)
- Requirements for Chinese Text Layout - 中文排版需求
- Requirements for Hangul Text Layout and Typography : 한국어 텍스트 레이아웃 및 타이포그래피를 위한 요구사항
- Arabic & Persian Layout Requirements
- Indic Layout Requirements
- HarfBuzz - Wikipedia 日本語版
- HarfBuzz - Wikipedia 英語版
- HarfBuzz – Y.A.M.A.P
- GNU FriBidi - Wikipedia 日本語版
- fribidi/fribidi: GNU FriBidi
- fribidi/fribidi - GNU FriBidi 0.19 series, an implementation of the Unicode Bidirectional Algorithm
LibreOffice の文書ファイルの仕様書です。
Web ブラウザ・ベンダの公開しているライブラリです。
- Google Chrome PDFエンジンがオープンソース化
- pdfium Git repositories - Git at Google
- Issues - pdfium - PDFium - Monorail
- Foxit Developer Hub | PDF SDK guide, FAQ & help
- にっき♪: PDFium
HEIF はロイヤリティの支払いが困難なため、除外しています。
- Independent JPEG Group
- libjpeg-turbo/libjpeg-turbo: Main libjpeg-turbo repository
- libjpeg-turbo:Beyond Linux® From Scratch
libexif のライセンスがプロジェクトに適していない場合には、JEITA の仕様書を参照して、独自に実装する方法を採用することが出来ると思います。
2017 年 12 月時点で、IE や 旧 Edge で APNG に対応していないため、APNG への対応方法は未調査です。
JIS X 4197:2012 は SVG Tiny の仕様書です。SVG ではありません。ご注意ください。
- memononen/nanosvg: Simple stupid SVG parser
- SVG 1.1 仕様 (第2版) 日本語訳
- JIS X 4197:2012 変倍ベクタグラフィックス/SVG Tiny 1.2
- memononen/nanovg: Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.
- NanoVG で HTML5 Canvas の力を C/C++ にも - Qiita
- NanoVG を CPU で描画する - Qiita
- NanoVG のソースコードを読んでみた - lriki’s blog
- Favicon - Wikipedia 日本語版
- Favicon - Wikipedia 英語版
- ICO (ファイルフォーマット) - Wikipedia
- ICO (file format) - Wikipedia
- [Rockridgeさんのツイート: "Fx55:PlacesのデフォルトファビコンがSVG形式に変更され、高DPI環境に対応した。 / “1360891 - Replace the Places default favicon with an SVG” https://t.co/XzskgQKwOy" ](https://twitter.com/rockridge07/status/868125619963314176
- [Rockridgeさんのツイート: "Fx56:Firefox 43以降512x512のサイズのファビコンが表示されなくなっていた後退バグを修正し、さらに768x768のような大きなファビコンもサポート。参照:https://t.co/5hbDBYV5s2 / “1…” https://t.co/3CnrOkx9K8"](https://twitter.com/rockridge07/status/905787835357077504
AAC は、ロイヤリティの支払いが困難なため、除外しています。
- WAV - Wikipedia 日本語版
- WAV - Wikipedia 英語版
- Resource Interchange File Format - Wikipedia 日本語版
- Resource Interchange File Format - Wikipedia 英語版
- Wave File Specifications
- WAVファイルフォーマットの読み込み – NecoTech
- wav ファイルフォーマット
- Waveフォーマット・PCM・サンプリング周波数・ビット数・チャンネル数とは、SoundEngine・RadioLineを例にわかりやすく解説 | 豆知識
- Vorbis - Wikipedia 日本語版
- Vorbis - Wikipedia 英語版
- Ogg - Wikipedia 日本語版
- Ogg - Wikipedia 英語版
- Xiph.org: Downloads
- Xiph.Org / Vorbis · GitLab
- Ftp - /pub/xiph/releases/vorbis/ :: Oregon State University Open Source Lab
- libvorbis:Beyond Linux® From Scratch
- Ftp - /pub/xiph/releases/ogg/ :: Oregon State University Open Source Lab
- libogg:Beyond Linux® From Scratch
- Xiph.org: Oggz
- Xiph.Org / liboggz · GitLab
- Ftp - /pub/xiph/releases/liboggz/ :: Oregon State University Open Source Lab
- The WebM Project | Developer Overview
- Opus (音声圧縮) - Wikipedia
- Opus (audio format) - Wikipedia
- Development – Opus Codec
- Opus:Beyond Linux® From Scratch
- Ftp - /pub/xiph/releases/ogg/ :: Oregon State University Open Source Lab
- libogg:Beyond Linux® From Scratch
- Xiph.org: Oggz
- Xiph.Org / liboggz · GitLab
- Ftp - /pub/xiph/releases/liboggz/ :: Oregon State University Open Source Lab
- The WebM Project | Developer Overview
- FLAC - Wikipedia 日本語版
- FLAC - Wikipedia 英語版
- FLAC - download
- xiph/flac: Free Lossless Audio Codec
- FLAC:Beyond Linux® From Scratch
特許切れの報道は確認したものの、利用可能なライブラリは未調査です。
H.264 や HEVC はロイヤリティの支払いが困難なため、除外しています。
Cisco Systems がロイヤリティを OSS 開発者に代わって支払ってくれるという OpenH264 は以下のような情報もあり、採用する場合は機能が不足していないか、確認が必要だと思います。
- vyv03354さんのツイート: "@d_toybox OpenH264はvideo要素で使うには機能不足らしく、WebRTCでしか使いません。AdobeのDRMプラグインを非DRM動画でも使おうという案もありましたが、Facebookで問題が起きて頓挫したようです。"
- vyv03354さんのツイート: "https://t.co/Bahw5xojAX Adobe CDMのバージョンアップでFacebookでの問題が解決したので、Firefox 46からXPでもH.264動画が再生できるようになる見込みです。 #もずでぶ"
- OpenH264
2024 年 4 月現在、Theora が使われなくなる傾向にあるようです。
- Deprecate and remove Theora support. - Chrome Platform Status
- Theora - Wikipedia 日本語版
- Theora - Wikipedia 英語版
- Theora.org :: downloads - Theora, video for everyone
- Xiph.Org / theora · GitLab
- Ftp - /pub/xiph/releases/theora/ :: Oregon State University Open Source Lab
- libtheora:Beyond Linux® From Scratch