このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/90
#  [1] 授業単元:画像処理  
#  [2] 問題文(含コード&リンク): 
#  赤(0〜255)、緑(0〜255)、青(0〜255)のそれぞれの濃淡で 
#  描かれた256色ビットマップ形式の3つの画像を読み込み、 
#  それぞれの色を重ね合わせて一つの画像にする。  
#  

ヘッダの長さ(14).

'赤(0〜255)、緑(0〜255)、青(0〜255)のそれぞれの濃淡で描かれた256色ビットマップ形式の3つの画像を読み込み、それぞれの色を重ね合わせて一つの画像にする。'(_画像ファイル1,_画像ファイル2,_画像ファイル3,_出力画像ファイル) :-
        open(_画像ファイル1,read,Instream1,[type(binary)]),
        画像ファイルを読み込む(Instream1,_情報ヘッダ1,_ビットマップデータ1),
        close(Instream1),
        open(_画像ファイル2,read,Instream2,[type(binary)]),
        画像ファイルを読み込む(Instream2,_情報ヘッダ2,_ビットマップデータ2),
        close(Instream2),
        open(_画像ファイル3,read,Instream3,[type(binary)]),
        画像ファイルを読み込む(Instream3,_情報ヘッダ3,_ビットマップデータ3),
        close(Instream3),
        open(_出力画像ファイル,write,Outstream,[type(binary)]),
        情報ヘッダを書き出す(Outstram,_情報ヘッダ1),        
        画像を合成して書き出す(Outstream,_ビットマップデータ1,_ビットマップデータ2,_ビットマップデータ3),
        close(Outsteam),!.

画像ファイルを読み込む(Instream,_情報ヘッダ,_ビットマップデータ) :-
        情報ヘッダの長さ(N),
        length(_情報ヘッダ,N),
        get_byte(Instream,Code),
        ビットマップデータを読み込む(Instream,Code,_ビットマップデータ1),
        append(_情報ヘッダ,_ビットマップデータ,_ビットマップデータ1),!.

ビットマップデータを読み込む(Instream,(-1),[]) :- !.
ビットマップデータを読み込む(Instream,Code,[Code|R]) :-
        get_byte(Instream,Code2),
        ビットマップデータを読み込む(Instream,Code2,R).

情報ヘッダを書き出す(Outstream,[]) :- !.
情報ヘッダを書き出す(Outstream,[Code|R]) :-
        put_byte(Outstream,Code),
        情報ヘッダを書き出す(Outstream,R).

画像を合成して書き出す(Outstream,[],[],[]) :- !.
画像を合成して書き出す(Outstream,[Code1|R1],[Code2|R2],[Code3|R3]) :-
        Code is Code1 \/ Code2 \/ Code3,
        put_byte(Outstream,Code),
        画像を合成して書き出す(Outstream,R1,R2,R3).