ホームに戻る
 リソースの使用(画像系)

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を足す

inserted by FC2 system