ホームに戻る
リソースの使用(画像系)
1、語句
2、ディスプレイの設定
3、スクリーンの設定
4、LCDカラーマップの作成
5、パレットの設定
6、キャラクターの設定
7、サンプルソース
8、bmpcnvの使用法
9、リソースの結合
10、メモ
1、語句
キャラクター
8ドット×8ドットで1キャラクター
1キャラクター内で表示可能な色は4色
最大512個まで同時使用できる
画像ファイル
横縦の幅がそれぞれ8ドットの倍数のビットマップ
表示可能色が256色でそのうち4色を使用したもの
4色は白、薄い灰色、濃い灰色、黒とすると
00、01、10、11の順で登録されるのでわかりやすい
画像は左上から右に右端まできたら次の行の左からとキャラクターに登録されていく
2、ディスプレイの設定
display_control(0x0007);
スクリーン1、スクリーン2、スプライト使用可
bit0 :1でスクリーン1が使用可能
bit1 :1でスクリーン2が使用可能
bit2 :1でスプライトが使用可能
bit3 :1でスプライトウィンドウが使用可能
bit4-5 :スクリーン2ウィンドウ機能 10で内側を表示 11で外側を表示
bit8-10:背景色の設定 LCDカラーマップから番号を設定
3、スクリーンの設定
screen_set_scroll(0, 0, 0);
スクリーン1をディスプレイの座標(0,0)に設置
引数1:0でスクリーン1 1でスクリーン2
引数2:X座標 単位はドット
引数3:Y座標 単位はドット
4、LCDカラーマップの作成
lcd_set_color(0x6420, 0xFCA8);
これでLCDカラーマップに
0-1-2-3-4-5-6-7
[0 2 4 6 8 A C F]
を設置したことになる
5、パレットの設定
palette_set_color(0, 0x7420);
パレット0にカラーマップ上の色
0-1-2-3
[0 2 4 7]
を設置したことになる
6、キャラクターの設定
font_set_colordata(0, 2, sample_char);
キャラクター番号0とキャラクター番号1へ2個のキャラクターを設定
sample_charには2つぶんのキャラクター情報が必要になる
引数1:キャラクター番号(0-511)
引数2:設定するキャラクターの個数
引数3:キャラクター配列の先頭ポインタ
7、サンプルソース
2×2キャラクターの画像1つ
3×2キャラクターの画像1つ
リソースから読み込み使用するサンプル
/*
* image.c
*/
#include <sys/bios.h>
#include <resource.h>
#define IMAGE_MAX 2
#define EXT /*extern*/
/* 関数 */
EXT void image_init();
res_image_t far *image[IMAGE_MAX];
BYTE far *find_resource(WORD type, int index)
{
extern void far *_resource;
BYTE far *res = (BYTE far *)_resource;
while(((res_t far *)res)->magic == RESID){
if(((res_t far *)res)->type == type && (index--) == 0)
return res;
res += (((res_t far *)res)->size << 4);
}
return NULL;
}
void image_init()
{
int i;
for(i = 0; i < IMAGE_MAX; i++){
image[i] = (res_image_t far *)(find_resource(RESID_IMAGE, i) + 16);
}
}
int main(int argc, char *args[])
{
BOOL loop = TRUE;
display_control(0x0007);
screen_set_scroll(SCREEN1, 0, 0);
screen_set_scroll(SCREEN2, 0, 0);
lcd_set_color(0x6420, 0xFCA8);
palette_set_color(0, 0x7620);
image_init();
font_set_colordata(0, 2 * 2, image[0]);
font_set_colordata(4, 3 * 2, image[1]);
screen_fill_char(SCREEN2, 0, 0, 1, 1, 0x0000);
screen_fill_char(SCREEN2, 1, 0, 1, 1, 0x0001);
screen_fill_char(SCREEN2, 0, 1, 1, 1, 0x0002);
screen_fill_char(SCREEN2, 1, 1, 1, 1, 0x0003);
screen_fill_char(SCREEN2, 2, 0, 1, 1, 0x0004);
screen_fill_char(SCREEN2, 3, 0, 1, 1, 0x0005);
screen_fill_char(SCREEN2, 4, 0, 1, 1, 0x0006);
screen_fill_char(SCREEN2, 2, 1, 1, 1, 0x0007);
screen_fill_char(SCREEN2, 3, 1, 1, 1, 0x0008);
screen_fill_char(SCREEN2, 4, 1, 1, 1, 0x0009);
do{
int key = key_wait();
switch(key){
case KEY_START:
loop = FALSE;
break;
default:
break;
}
}while(loop);
bios_exit();
}
8、bmpcnvの使用法
bmpcnv image0.bmp (画像ファイルimage0.bmpのリソース化)
bmpcnv -m imagec0.bmp (16色画像ファイルimagec0.bmpのリソース化)
カラー対応にはオプション-mをつける
できたリソースは拡張子が.frになる
9、リソースの結合
mkfent情報ファイル(拡張子.cfのファイル)の設定
name: image
info: image_sample
mode: 7
source: image.bin
resource: image0.fr image1.fr
output: image.fx
この時リソース番号は先に書いたものからつく
image0.fr は画像のリソース番号0
image1.fr は画像のリソース番号1
10、メモ
image[i] = (res_image_t far *)(find_resource(RESID_IMAGE, i) + 16);
画像配列までのオフセットが16なので16を足す
カラー対応では16のオフセットから32バイトぶんでリソースの16色を取得できる
画像配列までのオフセットは48になるのでカラーの場合48を足す