Scale2x

提供: MonoBook
2020年3月27日 (金) 02:29時点におけるAdministrator (トーク | 投稿記録)による版 (ページの作成:「'''Scale2x'''とは、アップスケーリングアルゴリズムのひとつである。 == 概要 == 画像の拡大縮小のアルゴリズムとし…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Scale2xとは、アップスケーリングアルゴリズムのひとつである。

概要

画像の拡大縮小のアルゴリズムとしてはニアレストネイバーバイリニアバイキュービックLanczosNoHaloLoHaloなどが有名だ。

一方、Scale2xは「2の倍数」の大きさに拡大するときに非常に高画質を得られる。ペイントソフトに搭載されているようなパーセンテージで拡大率を指定する用途にはまったく向いていないが、「2の倍数」に拡大するのであれば非常に高速かつ高画質を得られるというものである。

この特性から低解像度なディスプレイの時代の古いゲームを、最近の高解像度なディスプレイが前提のゲーム機に移植する際などに広く採用されている。


Scale2xは1992年頃にルーカスアーツで働くEric Johnstonによって開発されたものであり、「Eric's Pixel Expansion (EPX) 」とも呼ばれる。ルーカスアーツのゲームエンジンSCUMM」をIBM PC (320x200x256色)からMacintosh (640x480)に移植する際に考案したとされている。

現在scale2xのソースコードオープンソースとなっている。ライセンスGPLである。

その後、Scale3xなどの拡張アルゴリズムも続々と考案されている。

アルゴリズム

まず以下のような9ピクセルの画像があるとする。

A B C
D E F
G H I

中央のピクセルEを4分割する。

A B C
D E0 E1 F
E2 E3
G H I

4分割されたピクセルE群の各値は以下のように計算する。

E0 = D == B && B= F && D= HDE;
E1 = B == F && B= D && F= HFE;
E2 = D == H && D= B && H= FDE;
E3 = H == F && D= H && B= FFE;

これは次のように書き換えることができる。この僅かながら最適化されたコードは2001年ごろに各種ゲーム機のエミュレーターとして有名な「MAME」に搭載されたものであり、 「AdvMAME2x」と呼ばれる。

E0 = D == B && B= H && D= FDE;
E1 = B == F && B= H && D= FFE;
E2 = D == H && B= H && D= FDE;
E3 = H == F && B= H && D= FFE;

さらに次のように書き換えることができる。

ifB= H && D= F{
	E0 = D == BDE;
	E1 = B == FFE;
	E2 = D == HDE;
	E3 = H == FFE;
} else {
	E0 = E;
	E1 = E;
	E2 = E;
	E3 = E;
}

分割対象となるピクセルEが境界線上の場合は、境界線上にもっとも近いピクセルの値を利用して計算される。たとえばピクセルEが画像の右端にあり、ピクセルCFIがない状態の場合は、ピクセルBEHの値をピクセルCFIとして計算する。

関連項目