Как показать ничью subbitmap на экране в Allegro? - PullRequest
0 голосов
/ 09 февраля 2020

Я использую два растровых изображения, изображение (subbitmap) и сетку (основное растровое изображение)

ALLEGRO_BITMAP* grid = NULL;
ALLEGRO_BITMAP* image = NULL;
ALLEGRO_DISPLAY* display = NULL;

//Initialization
display = al_create_display(SCREEN_W, SCREEN_H + INFO_H);
grid = al_create_bitmap(SCREEN_W, SCREEN_H + INFO_H); 

al_set_target_bitmap(grid);
al_set_target_bitmap(al_get_backbuffer(display));

al_draw_bitmap(grid, 0, 0, 0);

//Creating a model
image = loadBitmapAtSize(...);
al_create_sub_bitmap(grid, 0, 0, columns, rows);
al_draw_bitmap(image, 0, 0, 0);

Пока здесь все идет хорошо, но если я рисую непосредственно в изображение (subbitmapt), то я не нашел, как отправить изменения на дисплей.

al_set_target_bitmap(image);

//rows and cols are the height and width of subbitmap
for (int y = 0; y < rows; ++y) {
    for (int x = 0; x < columns; ++x) {
        if(x == y || x-1 == y || x+1  == y || x == y-1 || x == y+1){
            //I test the condition and the program is entering to the if
            al_draw_pixel(x, y, al_map_rgb(255, 255, 255));
        }
    }
}

al_set_target_bitmap(grid);

al_flip_display();

Есть идеи, как я могу обновить основное растровое изображение после редактирования подбитовой карты?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вы должны нарисовать свое растровое изображение на экране, а затем перевернуть его.

al_set_target_backbuffer(display);
al_draw_bitmap(grid , 0 , 0 , 0);
al_flip_display();
0 голосов
/ 10 февраля 2020

Из документации Allegro:

Подбитовое изображение - это растровое изображение, которое совместно использует память чертежа с уже существующим (родительским) растровым изображением, но, возможно, с другими настройками размера и отсечения.

https://www.allegro.cc/manual/5/al_create_sub_bitmap

al_create_sub_bitmap возвращает указатель на ALLEGRO_BITMAP, который необходимо присвоить переменной для использования.

Для создания и назначьте свою карту суббита, вы можете использовать:

ALLEGRO_BITMAP* subbitmap = al_create_sub_bitmap(grid, 0, 0, columns, rows);
al_set_target_bitmap(subbitmap);
...