2

我只是在试用 allegro 库,这是我目前得到的代码:

#include <allegro.h>

int main(int argc, char *argv[]) {
    allegro_init();  // initialize the allegro libraries
    install_keyboard(); // initialize keyboard functions
    
    set_color_depth(16); // set the color depth
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); // set up 640*480px window
    
    BITMAP *pic = NULL;
    pic = load_bitmap("C:/picture.bmp", NULL); // load the picture
    blit(pic, screen, 0, 0, 0, 0, 1000, 1000);

    readkey();
    destroy_bitmap(pic);
    return 0;
} 
END_OF_MAIN()

它工作正常,但是当我运行它时,当程序的窗口打开时,Windows 7 将主题从 Aero 更改为 Aero basic。如果你不确定我的意思,会弹出这个(我从谷歌得到这个,这就是为什么它说 Vista 而不是 Windows 7):

http://www.suitedcowboys.com/wp-content/uploads/2007/01/010607_0906_HelloVistai28.png
(来源:suitcowboys.com

  1. 为什么?
  2. 我怎样才能确保不会发生这种情况?
4

2 回答 2

5

Aero 需要将颜色设置为 32 位,但您将其设置为 16:

set_color_depth(16);

于 2010-03-28T00:57:36.950 回答
2

除非您有充分的理由使用特定的颜色深度,否则请执行以下操作:

int cd = desktop_color_depth();
if (cd < 15) cd = 32;
set_color_depth(cd);

虽然今天通常不是问题,但许多较旧的视频卡仅支持 15/16 位之一和 24/32 位之一。

如果您因为使用调色板而需要使用 8 位颜色深度,那么只需使用GFX_GDI驱动程序以获得最大兼容性。

于 2010-03-28T03:55:48.263 回答