田中太郎
SystemVerilogを使用してBMPファイル(バイナリファイル)を読み込みます
BMPファイルを読み込む
BMPファイルはヘッダー、インフォ、カラーバレット(ない場合も)、画素データからなります
詳しい内容はここでは割愛します
下記のは512×512画素のグレー画像を取得して、なにもせず保存するサンプルコードです
入力画像
サンプルコード
module tb;
// 定数
localparam IMG_H = 207;
localparam IMG_W = 196;
localparam HEADER_SIZE = 14;
localparam INFO_SIZE = 40;
reg byte unsigned header[HEADER_SIZE]; // BMPのヘッダーを格納する
reg byte unsigned info[INFO_SIZE]; // BMPのインフォを格納する
reg byte unsigned color[1024]; // BMPのカラーバレットを格納する
reg byte unsigned data[IMG_H*IMG_W]; // 画素データを格納する
int f;
initial begin
f = $fopen("rob.bmp", "rb"); // バイナリリード型で開く
$fread(header, f, 0, HEADER_SIZE); // ヘッダー取得
$fread(info, f, 0, INFO_SIZE); // インフォを取得
$fread(color, f, 0, 1024); // カラーバレットを取得
$fread(data, f, 0, IMG_H*IMG_W); // 画素データを取得
$fclose(f);
f = $fopen("result.bmp", "wb"); // result.bmpをバイナリライト型で開く
foreach(header[i])
$fwrite(f, "%c", header[i]); // ヘッダー
foreach(info[i])
$fwrite(f, "%c", info[i]); // インフォ
foreach(color[i])
$fwrite(f, "%c", color[i]); // カラーバレット
foreach(data[i])
$fwrite(f, "%c", data[i]); // 画素データ
$fclose(f);
end
endmodule
出力画像
まとめ
SystemVerilogでBMP(ビットマップ)ファイルを取得して作成しました。
コメント