画像ファイルの読込には、バイナリデータとアスキーデータを 混在して扱う AsciiStreamReader クラスが必要となりますが、 これらは「C# で学ぶ Ray Tracing」の方で 説明していきます。
・Image クラス
・RGB 構造体
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(); }
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(); }