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);

如果您的图像库启用了对它的支持,您还可以使用pngand作为扩展。jpg

使用这些函数来读取文本文件:

  • al_fopen
  • al_fgetc
  • al_feof
  • al_fclose

设置int xy为零。您将一直循环到文件末尾。每次迭代递增x一。如果到达换行符 ( \n)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 回答