1

こんにちは、私が現在扱っているのは、テキスト ファイルから入力を取得し、それをビットマップに変換してファイルに保存する機能です。

入力は次のようになります。

########
#      #
########

allegro を使用して描画したいのですが、# の代わりに、指定されたサイズのピクセルがあります。各 # はタイル (10x10 ピクセル) を表す必要があります。したがって、最終結果は次のようになります

画像へのリンク

私は実際にこのコードを使用してそれを描画しました:

 for (int i = 0; i < 80; i++){
        for (int j = 0; j < 10; j++){
            al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
        }
    }
    for (int i = 0; i < 10; i++){
        for (int j = 10; j < 20; j++){
            al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
        }
    }
    for (int i = 70; i < 80; i++){
        for (int j = 10; j < 20; j++){
            al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
        }
    }
    for (int i = 0; i < 80; i++){
        for (int j = 20; j < 30; j++){
            al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
        }
    }

ええ、それはかなり悪いので、どうすればそのようなことを達成できますか?アドバイスをありがとう。

注: 使用できるヘッダーは allegro5/allegro.h と allegro5/allegro_image.h のみです。

4

1 に答える 1

0

Allegro 5 で画像に描画するには、次のようにする必要があります。

ALLEGRO_BITMAP *bmp = al_create_bitmap(640, 480);
al_set_target_bitmap(bmp);

これで、すべての描画操作が画像に対して行われます。後で保存するには:

al_save_bitmap("somefile.bmp", bmp);

イメージ ライブラリで and のサポートが有効になっている場合は、拡張機能としてpngとを使用することもできます。jpg

これらの関数を使用して、テキスト ファイルを読み取ります。

  • al_fopen
  • al_fgetc
  • al_feof
  • al_fclose

int xyをゼロに設定します。ファイルの最後までループします。反復ごとに 1 ずつインクリメントxします。改行文字 ( \n) に達すると、1 ずつ増加yし、ゼロに設定さxれます。(文字は無視してください\r。)

次に、読み取った文字に応じて、タイルを描画します。

ALLEGRO_BITAMP *tile_to_draw = NULL;
if (c == '#')
   tile_to_draw = bmp1;
else if (c == ' ')
   tile_to_draw = bmp2;

if (tile_to_draw)
   al_draw_bitmap(tile_to_draw, x * 10, y * 10, 0);

もちろん、一連のifs よりも文字をタイルにマップするためのより良い方法がありますが、上記の方法は機能し、宿題を完了するのに十分なはずです。

于 2012-04-28T18:28:01.833 に答える