2012-04-28 73 views
1

你好我目前正在處理的是從文本文件獲取輸入然後將其轉換爲位圖並將其保存到文件的能力。文本文件位圖在allegro

輸入如下:

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

,我希望它用快板代替#會有指定大小的像素和畫畫。每個#應代表一個圖塊(10x10像素)。所以,最後的結果是這樣的

link to an image

我使用這段代碼實際上得出它:

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

回答

0

要與快板5繪製到的圖像,你需要做的是這樣的:

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

現在所有的繪圖操作都會發生在圖像上。要稍後保存:

al_save_bitmap("somefile.bmp", bmp); 

您還可以使用pngjpg作爲擴展,如果你的圖片庫中有支持它啓用。

使用這些功能來讀取文本文件:

  • al_fopen
  • al_fgetc
  • al_feof
  • al_fclose

設置int xy爲零。你會循環直到文件結束。在每個迭代增量x之一。如果您達到新行字符(\n),則將y增加1,並將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); 

當然還有更好的辦法不是一系列if s到字符映射到瓷磚,但以上的作品,應該足以幫助你完成作業。

+0

我在哪裏存儲這些值?或者我根本不需要存儲它們?像int c;或一個字符數組來存儲所有這些字符?那些bmp1和bmp2又是什麼? – Markus 2012-04-28 18:56:49

+0

也有一個x計數器的錯誤..因爲al_feof返回EOF所以x採取EOF和值爲2.如何解決這個問題? – Markus 2012-04-28 19:16:19

+0

'c'表示當前迭代的'al_fgetc'的值。你真的應該能夠根據我的代碼得到一個工作解決方案。如果沒有,你可能需要更多的幫助,而不是這個網站的真正目的,你應該考慮在一些論壇上尋求幫助,例如http://www.allegro.cc/forums。 – Matthew 2012-04-29 01:25:09