简体   繁体   English

allegro5,C-循环显示位图的副本

[英]allegro5, C - display copy of bitmap in loop

In my program I load bitmap from file (source) and I want to copy it and display copy on the screen each time mouse button pressed. 在我的程序中,我从文件(源)中加载位图,我想将其复制并在每次按下鼠标按钮时在屏幕上显示副本。 I pasted making copy and displaying bitmap, but it doesn't work. 我粘贴了复制并显示位图的功能,但是没有用。 Displaying original works in my code. 在我的代码中显示原始作品。

    while( true )
    {
      ALLEGRO_EVENT event;
      al_wait_for_event( queue, &event );

      if( event.type == ALLEGRO_EVENT_KEY_DOWN && event.keyboard.keycode == ALLEGRO_KEY_ESCAPE )
      {
          destroy( queue, source, display );
          al_destroy_bitmap( copy );
          return 0;
      }

      if( event.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN )
      {
          if( copy )
            al_destroy_bitmap( copy );

          copy = al_create_bitmap( al_get_bitmap_width(source), al_get_bitmap_height(source) );

          al_set_target_bitmap( copy );
          al_draw_bitmap( source, 0, 0, 0 );
          al_flip_display();
      }
    }

I've found a solution already, to do a deep-copy of bitmap : ALLEGRO_BITMAP* al_clone_bitmap( BITMAP* source) function can be used. 我已经找到一种解决方案,可以对位图进行深层复制:可以使用ALLEGRO_BITMAP * al_clone_bitmap(BITMAP *源)函数。

while( true )
{
  ALLEGRO_EVENT event;
  al_wait_for_event( queue, &event );

  if( event.type == ALLEGRO_EVENT_KEY_DOWN && event.keyboard.keycode == ALLEGRO_KEY_ESCAPE )
  {
      destroy( queue, source, display );
      al_destroy_bitmap( copy );
      return 0;
  }

  if( event.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN )
  {
      if( copy )
        al_destroy_bitmap( copy );

      copy = al_clone_bitmap( source );
      al_draw_bitmap( copy, 0, 0, 0 );
      al_flip_display();
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM