ベクター画像
ベクター画像(ベクターがぞう、vector graphics)は、コンピュータグラフィックスなどにおいて、画像を円や直線などのような解析幾何学的な「図形」の集まりとして表現する表現形式である。平面をスキャンし、その各点の濃淡の集まりによって画像を表現する「ビットマップ画像」(ラスター形式)と対置される。それを描画する操作として(仮想の)絵筆を動かすようなスタイルになることから、ドロー形式、ドローグラフィックなどとも呼ばれる。
ビットマップ画像が通常、データの順序によって座標を間接的に示すのと異なり、ベクター画像はオブジェクトごとに座標を明示的に指定するものが多い。
縦横の位置で表す「直交座標」と、方向と距離で表す「極座標」がある。極座標のほうが便利な場合もあり、たとえば一般の回転角についてなど、厳密な結果を保存するために極座標が必要なこともあるが、通常は直交座標のほうが扱いやすい。また円弧の指定などでも併用される。
常にグローバルな原点をベースとする「絶対座標」と、他オブジェクトからの位置関係や、最終参照位置との相対で表す「相対座標」がある。
たとえば、LOGOなどの「タートルグラフィックス」では、もともと、コンピュータから制御される、実体を持ったロボット(右の写真を参照)を制御するというモデルをベースとしていたこともあり、相対座標が基本である。
この2種類もやはり併用されることも多い。全体に対する(グローバルな)絶対座標によりあるオブジェクト(図形のグループ)の原点(座標系)を指定し、そのグループ内の図形はその(ローカルな)座標系を使って定義する、といった感じである。そのようにすると、たとえば、ローカルな座標系に対し移動や変換を掛けるだけで、そのグループ自体には干渉することなくその全体を移動や変形させることができる。
複数の図形のグループ化や、ステンシルとしての使用など複数の図形を組み合わせる方法と、それらの基になるプリミティブが用意されていることが多い。
プリミティブの例としては、ライン(線分)やポリゴン(多角形)、サークル(円)、カーブ(円弧、円の一部)などがある。高機能なアプリケーションにおいてはベジェ曲線を自由に操作できる。その代表的な製品にAdobe IllustratorとCorelDRAWがある。
線(line)や折れ線(polyline)
テキスト(特にアウトラインフォントを用いる場合は、それぞれの文字はベジェ曲線によって形作られる。)
これ以外にもスプライン曲線などの図形が基本図形として使えるアプリケーションもある。また、ビットマップもオブジェクトとして扱えるようになっている場合が多い。
点で結ばれた線で図形を表す。結ばれた線の終点が始点と重なった、四角や円、多角形などの閉じた図形の内部の領域を「面」と呼ぶ。点の座標と、線の属性(線の太さ、色、破線、実線など)、線で囲まれた面の属性(色や、パターンなど)、で表現される。点、線、面のそれぞれのさまざまな性質、たとえば、線の起終点の位置、曲線であればその曲がり方、太さ、色、それら線に囲まれた面の色、などの変化のしかたなどを数値で表す。SVGでは、任意のアウトラインを表現するために、このプリミティブを大量のデータをともなって多用することを考慮したデータ形式(path要素のd属性の値)となっている。
文字(ないし文字列)もオブジェクトとして扱えることが多い。文字自身の文字コードと座標の他、フォント名、サイズ、色、変形方法などが指定できることが多い。サイズには他のオブジェクト同様の、座標値やミリ単位の他に、ポイントなど文字として扱いやすい単位も使えることが多い。
ビットマップ画像もひとつのオブジェクトとして扱うことができるものも多い。描かれる座標と縦横の表示上のサイズ(または縦横の解像度や拡大率)を持つ。場合によっては、描画方向(回転角度や反転軸)、アフィン変換などの変形の情報を持つこともある。ビットマップデータは、埋込み方式のものもあれば、外部のファイルなどを参照する方式もある。大きな画像データなどでは後者の方法が扱えたほうが取り回しが良いが、ファイル1個に必要な全てのデータが入っていない不便もある。
多くのドローソフトあるいはデータ形式では、これらのオブジェクトに対し、拡大縮小・回転などを掛けることができる。一般化してアフィン変換としているものが多い。共通部分や差分を取り出す、いわゆるブーリアン演算も付いているものが多い。グラデーションや透明度(アルファ、あるいは不透明度opacity)などを扱えるドローソフトやグラフィックフォーマットもある。透明度を含んだ合成に関する詳細はアルファチャンネルの記事を参照。
ベクタイメージは、デバイス非依存の図形・画像を記述するのに優れている。ラスタライズや印刷の処理プログラム等を各デバイス向けに作ることができ、それぞれの描画指示のもととなる図形情報だけをデータとして扱うことができるからである。このような考え方からPostScriptやPDFといったページ記述言語の描画モデルはベクタベースである。
3次元コンピュータグラフィックスでは3次元空間上の多角形(ポリゴン)や曲面等として形状を作成する。これは2次元図形であるベクタイメージを作成するとき、基本図形を組み合わせて複雑な図形イメージを作ることと非常に似ている。この3次元の図形イメージを透視図法などで2次元のビットマップに変換する作業をレンダリングと呼ぶが、これは、形状や位置のほかに、光のあたり具合なども計算しなければならないので、2次元のラスタライズの処理に比べはるかに複雑である。そのためゲームなどの速度を要するレンダリングでは、曲面を用いずに平面であるポリゴンの集まりで物体を表現するのが普通である。
macOSで使われるQuickDraw、DTPで使われるPostScript、CADで使われるHP-GLなどがある。PostScriptやHP-GLなど「図形処理言語」と呼ばれるものは、形状表現だけではなくプログラミング言語的な機能も持つものがある(特に、PostScriptはほとんど汎用言語並みの能力がある)。アプリケーションだけでなく、プリンタ内部にもそれらの言語処理系が用意され、スピーディにラスタライズできる機種がある。
ドローソフトと呼ばれる。以下には、ドローソフトの機能も備える汎用のグラフィックソフトを含む。
ベクター画像のイメージデータは容易にビットマップ画像に変換できる。多くの場合、OSにその機能のAPIがあるので、アプリケーションはその機能を呼び出すだけでよい。ディスプレイの何倍もの画素数であっても、内部に仮想フレームバッファを設定すれば可能となるが、そのためには大きなメモリが必要である。
逆は一般に難しい。なぜなら、逆問題だからである。一部の高度なソフトにはベクター化の機能を持つものもあるが、必ずしも万能ではない。2016年現在でも、新しい手法の提案などが学会等での研究発表で見られる分野である。
画像をピクセルの集合で表現しようとするビットマップと比べ、拡大、縮小、その他の変形を施しても図形イメージが基本的に劣化しないという特性を持つ。単純な図形で構成されている場合、ビットマップ画像よりもデータサイズは小さい。
しかしながら、写真のような画像から線や面を抽出して数値化することは現在の技術では困難であり、実際には、はじめからグラフィックソフトウェアを使用してベクタイメージを作成する場合を除いては、画像アプリケーションには使われない。すなわち、ロゴや非リアリスティックなイラストには向くが、そのほかの一般画像には不向きである。逆に文字のフォントデザインにおいては、拡大や縮小その他の変形が容易なことから、多用される。このようなベクタイメージの手法を用いた文字フォントを「アウトラインフォント」と呼ぶ。
ラスタースキャンディスプレイにはラスタライズして表示される。
1950〜1980年代のコンピュータでは、ラスタースキャンでの高精細な表示は高価につき(ラスタースキャンに必要なフレームバッファを構成できる性能と容量のメモリなどのため)難しいことから、図形の表示目的に、ベクタースキャンディスプレイが用いられていた(また当時はプロッターも活用された)。CADなどで使われた。ベクタースキャンでは、スキャンの速さを変えることでも輝度を変えることができる。これに対しラスタースキャンでは、ブラウン管の電子銃は表示面を均等に走査するのであって、輝度は電子銃からの電子線の強さを変調することで表現している。
プリンターの多くもディスプレイ同様、ラスタスキャンを行っている。それゆえアウトラインフォントのテキストやベクタイメージを印刷するときは、OS上もしくはプリンターの内部で、高解像度にラスタライズされてから印刷している。
プロッターは、ベクター画像のデータを直接印刷する。これはペンなどを移動させて作図しており、図形処理言語が座標を指定して作図することからX-Yプロッタとも呼ばれる。プロッターは設計図面の印刷などに用いられる。