Проблемы с SDL_SetColorKey - PullRequest
       30

Проблемы с SDL_SetColorKey

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

Я пытаюсь создать прозрачный спрайт с SDL.Я использую SDL_SetColorKey на растровом изображении с пурпурным (0xff00ff) фоном (это 100% пурпурный, я проверил его с помощью GIMP :)) Вызов SDL_SetColorKey выглядит следующим образом:

SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(bitmap->format, 255, 0, 255) );

Вызов SDL_SetColorKey, по-видимому, возвращает 0, однако прозрачности нет.Может кто-нибудь сказать мне, что мне здесь не хватает?

Вот проблемный код на случай, если кто-то захочет его протестировать:

#include "SDL/SDL.h"

const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
const char* WINDOW_TITLE = "SDL Start";

int main(int argc, char **argv)
{
   SDL_Init( SDL_INIT_VIDEO );

   SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0, 
      SDL_HWSURFACE | SDL_DOUBLEBUF );
   SDL_WM_SetCaption( WINDOW_TITLE, 0 );

   SDL_Surface* bitmap = SDL_LoadBMP("resources/ship.bmp");
   if(SDL_SetColorKey( bitmap, SDL_SRCCOLORKEY, SDL_MapRGB(bitmap->format, 255, 0, 255) )) printf("aaaaa %s", SDL_GetError());



   // Part of the screen we want to draw the sprite to
   SDL_Rect destination;
   destination.x = 100;
   destination.y = 100;
   destination.w = 65;
   destination.h = 44;

   SDL_Event event;
   bool gameRunning = true;

   while (gameRunning)
   {
      if (SDL_PollEvent(&event))
      { 
         if (event.type == SDL_QUIT)
         {
            gameRunning = false;
         }
      }

      SDL_BlitSurface(bitmap, NULL, screen, &destination);

      SDL_Flip(screen);
   }

   SDL_FreeSurface(bitmap);

   SDL_Quit();

   return 0;
}

ОБНОВЛЕНИЕ : На случай, если кому-то понадобитсяэто, вот изображение: http://dl.dropbox.com/u/8936880/ship.bmp

1 Ответ

5 голосов
/ 11 февраля 2011

Проблема с вашим изображением, я использовал сгенерированный мной, и он работает из коробки с вашим кодом.

Ваше изображение в 32 битах, и кажется, что SDL_SetColorKey это не нравится,преобразуйте его в 24 бита, и он должен работать.

Вы можете преобразовать его с помощью Gimp при сохранении в BMP из расширенных настроек.

Попробуйте с этот преобразованныйдо 24 бит.

...