Mercurial > sdl-ios-xcode
comparison src/video/SDL_bmp.c @ 2969:1ee69e7e7cea
Added support for saving 32-bit BMP with alpha channel (disabled by default)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 03 Jan 2009 01:00:38 +0000 |
parents | e4a469d6ddab |
children | 502adab079a4 |
comparison
equal
deleted
inserted
replaced
2968:efe4d0ce2e97 | 2969:1ee69e7e7cea |
---|---|
375 Uint32 biClrImportant; | 375 Uint32 biClrImportant; |
376 | 376 |
377 /* Make sure we have somewhere to save */ | 377 /* Make sure we have somewhere to save */ |
378 surface = NULL; | 378 surface = NULL; |
379 if (dst) { | 379 if (dst) { |
380 if (saveme->format->palette) { | 380 SDL_bool save32bit = SDL_FALSE; |
381 #ifdef SAVE_32BIT_BMP | |
382 /* We can save alpha information in a 32-bit BMP */ | |
383 if (saveme->map->info.flags & SDL_COPY_COLORKEY || | |
384 saveme->format->Amask) { | |
385 save32bit = SDL_TRUE; | |
386 } | |
387 #endif /* SAVE_32BIT_BMP */ | |
388 | |
389 if (saveme->format->palette && !save32bit) { | |
381 if (saveme->format->BitsPerPixel == 8) { | 390 if (saveme->format->BitsPerPixel == 8) { |
382 surface = saveme; | 391 surface = saveme; |
383 } else { | 392 } else { |
384 SDL_SetError("%d bpp BMP files not supported", | 393 SDL_SetError("%d bpp BMP files not supported", |
385 saveme->format->BitsPerPixel); | 394 saveme->format->BitsPerPixel); |
397 ) { | 406 ) { |
398 surface = saveme; | 407 surface = saveme; |
399 } else { | 408 } else { |
400 SDL_PixelFormat format; | 409 SDL_PixelFormat format; |
401 | 410 |
402 /* Convert to 24 bits per pixel */ | 411 /* If the surface has a colorkey or alpha channel we'll save a |
403 SDL_InitFormat(&format, 24, | 412 32-bit BMP with alpha channel, otherwise save a 24-bit BMP. */ |
413 if (save32bit) { | |
414 SDL_InitFormat(&format, 32, | |
415 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000); | |
416 } else { | |
417 SDL_InitFormat(&format, 24, | |
404 #if SDL_BYTEORDER == SDL_LIL_ENDIAN | 418 #if SDL_BYTEORDER == SDL_LIL_ENDIAN |
405 0x00FF0000, 0x0000FF00, 0x000000FF, | 419 0x00FF0000, 0x0000FF00, 0x000000FF, |
406 #else | 420 #else |
407 0x000000FF, 0x0000FF00, 0x00FF0000, | 421 0x000000FF, 0x0000FF00, 0x00FF0000, |
408 #endif | 422 #endif |
409 0); | 423 0); |
424 } | |
410 surface = SDL_ConvertSurface(saveme, &format, 0); | 425 surface = SDL_ConvertSurface(saveme, &format, 0); |
411 if (!surface) { | 426 if (!surface) { |
412 SDL_SetError("Couldn't convert image to 24 bpp"); | 427 SDL_SetError("Couldn't convert image to %d bpp", format.BitsPerPixel); |
413 } | 428 } |
414 } | 429 } |
415 } | 430 } |
416 | 431 |
417 if (surface && (SDL_LockSurface(surface) == 0)) { | 432 if (surface && (SDL_LockSurface(surface) == 0)) { |