画像関係クラス


ToyBox2012 の機能を試用する為に理解すべき 画像関係のクラスは Image と RGB です。

画像ファイルの読込には、バイナリデータとアスキーデータを 混在して扱う AsciiStreamReader クラスが必要となりますが、 これらは「C# で学ぶ Ray Tracing」の方で 説明していきます。

Image クラス
RGB 構造体

Image クラス
public class Image {
	// プロパティ
	public int Width { get; }
	public int Height { get;}

	// コンストラクタ
	public Image();
	public Image(int inWidth,int inHeight);
	public Image(int inWidth,int inHeight,RGB inBackgroundColor);
	public Image(string inFilePath,
				 bool inConvertSRGBToLinear=true);

	// ピクセルの設定と取得
	public bool Set(int inX,int inY,RGB inColor);
	public RGB BilinearAccess(float inX,float inY);

	// ファイルの入出力
	public void WritePPM(string inFilePath);
	public void WriteEXR(string inFilePath);
	public void ReadPPM(string inFilePath);
	
	// 色空間の変換
	public void ConvertLinearToSRGB();
	public void ConvertSRGBToLinear();
}

RGB 構造体
public struct RGB {
	// 色空間変換
	static public byte FloatToByte(float inValue);

	// クラスプロパティ
	static public RGB White { get; }
	static public RGB One{ get; }	// White と同じ
	static public RGB Black { get; }
	static public RGB Zero { get; }	// Black と同じ
	static public RGB Red { get; }
	static public RGB Green { get; }
	static public RGB Blue { get; }
	static publie RGB Magenta { get; }

	// コンストラクタ
	public RGB(float inR,float inG,float inB);
	public RGB(RGB inSrcColor);
	public RGB(float inIntensity);
	
	// 初期化
	public void Init(float inR,float inG,float inB);

	// クランプ
	public RGB Clamp();	// Clamp(0,1) と同じ
	public RGB Clamp(float inMin,float inMax);

	// 演算子オーバーロード
	static public RGB operator-(RGB inColor);	// 単項マイナス
	static public RGB operator-(RGB inColor1,RGB inColor2);
	static public RGB operator+(RGB inColor1,RGB inColor2);
	static public RGB operator*(RGB inColor1,RGB inColor2);
	static public RGB operator*(float inK,RGB inColor);
	static public RGB operator*(RGB inColor,float inK);
	static public RGB operator/(RGB inColor1,RGB inColor2);
	static public RGB operator/(RGB inColor,float inK);
	static public RGB operator==(RGB inColor1,RGB inColor2);
	static public RGB operator!=(RGB inColor1,RGB inColor2);

	public override bool Equals(object inObj);
	public override int GetHashCode();
	public override string ToString();
}