ルネサス RX65N-Envision-Kit (RX65N 評価ボード RTK5RX65N2C00000BR) を使って写真の描画をしてみました。画面サイズは 480×272 で、表示に使える RAM は 384KB ありますので、1面を表示するだけなら 16ビットカラーが使えます。しかし画面を瞬時に切り替えたりする用途の場合には 2面必要なので、8ビットカラーを使うことにしました。
そして、この写真のように表示することができました。
描画できるようにする手順を説明します。
1. 写真 (jpeg ファイル) の解像度を減らし、カットして 480×272ピクセルのデータにする。
2. インデックスカラー (256色) に変換して、ビットマップで複製を作る。
註)1. 2. には画像処理ソフト Photoshop Lite を使いました。
3. プログラムを組んで、カラーパレットを抽出して、ファイルに次のようなデータを書き出す。
もちろん変数名は cp でなくても自由です。
const unsigned long cp[] = { ... };
4. プログラムを組んで、画像データを抽出して、ファイルに次のようなデータを書き出す。
const unsigned char bmp_data[] = { ... };
もちろん変数名は bmp_data でなくても自由です。
註)ビットマップ・ファイルは下記のような順で情報が入っています。
// ビットマップ・ファイル・ヘッダー
struct BITMAPFILEHEADER {
WORD bfType; // ファイルタイプ BM
DWORD bfSize; // ファイルサイズ (byte)
WORD bfReserved1; // Reserved; 常に 0
WORD bfReserved2; // Reserved; 常に 0
DWORD bfOffBits; // ファイル先頭から画像データまでのオフセット(byte)
};
// ビットマップ・情報ヘッダー
struct BITMAPINFOHEADER {
DWORD biSize; // 情報ヘッダサイズ[byte]
LONG biWidth; // 画像の幅[ピクセル]
LONG biHeight; // 画像の高さ[ピクセル]
WORD biPlanes; // プレーン数 常に1
WORD biBitCount; // 色ビット数[bit] 1,4,8,(16),24,32
DWORD biCompression; // 圧縮形式 0,1,2,3
DWORD biSizeImage; // 画像データサイズ[byte]
LONG biXPelsPerMeter; // 水平解像度[dot/m] 0の場合もある
LONG biYPelsPerMeter; // 垂直解像度[dot/m] 0の場合もある
DWORD biClrUsed; // 格納パレット数[使用色数] 0の場合もある
DWORD biClrImportant; // 重要色数 0の場合もある
};
// RGBQUAD (rgbBlue, rgbGreen, rgbRed, rgbReserved) カラーパレット
DWORD palet[256]; // 256色カラーパレット
// 画像データ
プログラムは Visual C++ の Win32 コンソールアプリで作りました。
説明は構造体で書きましたが、実際には fread() で構造体に入れると、Visual C++ では WORD bfType; の次に2バイトパディングされてしまってうまくいかないので、バイトデータとして fread() して、入れ直しました。
LCD 用メモリーセクションは次のように作成しました。
8ビット (256色) のデータバッファーを 2面確保しました。
#pragma section LCD // リンカーに登録する。リンカーでの名称は BLCD_1 となる。
volatile unsigned char lcd_buffer[2][272][512];
#pragma section
ラインは 480 なのに 512 でバッファーを作っているのは、読み出しが 64バイトなので、64 の整数倍である必要があるからです。
データを設定するプログラムは次のようになります。
// カラーパレット
for (i=0; i<256; i++) {
GLCDC.GR2CLUT0[index].LONG = cp[i];
}
// 画像データ
for (i=0; i<272; i++) {
for (j=0; j<480; j++) {
lcd_buffer[0][i][j] = bmp_data[i * 480 + j];;
}
}
電子回路の設計サービス/安田電子設計事務所 はRXマイコンの設計も行っています。
お困りのことがあればご気軽にお問い合わせください。