入力については様々な形式に対応してきた。画像データ構造体が表現しているものをそのまま出力するにとどめている。ここで用意した方法では出力することはできない。出力上それらパラメータが必要な場合はデフォルト値を埋め込むのみとしている。圧縮の有無を引数で指定することで出し分けることができるようにした。それ以外の場合は圧縮フラグは無視される。バイトストリーム出力においても入力と同様に処理の中でエンディアンを意識しなくてすむようにバイトストリームを利用する。入力とは逆に予め用意されたバッファへ書き込んでいく形の構成になる。具体的な処理としては特に特別なことはしていないが、以下に32bitの出力関数を示す。抽出し内部バッファに順次書き込む処理となっている。4;}この処理もビットシフトを利用した処理にしているため、エンディアン依存性はない。エンディアンごとに実装を差し替える必要がある。これは開発方針次第でどちらでも良いだろう。オープン済みのファイルストリームを利用するもの両方を用意している。以下がオープン済みのファイルストリームに出力する関数である。グレースケールの場合はインデックスカラー方式に変換してから出力するようにしている。コピーを行ってからコンバートし、外部に影響を与えないようにしている。このコピーは処理が終わったら開放する。その後、各形式から1色あたりのビット数を計算している。このパラメータに従い以降の出力方法を分岐させている。あとはヘッダの出力、カラーパレットの出力、画像データの出力と続く。ヘッダの出力では、イメージサイズを計算して引数として渡している。圧縮を行わない場合は1行のデータサイズと高さを掛けあわせれば求めることができる。1行のデータサイズは、1色のデータサイズ×幅+4Byte境界にするためのパディングである。圧縮を行う場合は、実際に圧縮処理を行ってみないことにはサイズは不明のため、この時点ではサイズはわからない。圧縮処理を行った後、サイズが判明してからヘッダ部分を再度上書きして修正する方針とした。この修正の出力でも同じヘッダ出力関数を使うため、サイズを引数で渡せるようにしている。処理全体の流れとしては以上となる。以降、個々の処理を具体的に解説する。以下がヘッダの出力関数である。result;}処理としては非常に単純なのだが、ヘッダの構造をベタ書きにせざるを得ないため、行数としては多くなってしまっている。ヘッダの構造が変わると、サイズに関する情報も変える必要が有るため、予め計算しておく。この値についても予め計算しておく。あとは、ヘッダの定義にしたがって予め確保したバッファに出力してゆき、データが揃ったらまとめてファイルに出力する。ついてはビット数に応じて分岐して出力している。