PNG dosyasını (bazı saydam yerlerle) SDL uygulamasına yüklüyorum.SDL_image PNG şeffaflık hatası
bu kod örneği ile bana verilen nasıl yapılacağına ilişkin Googling:
SDL_Surface *LoadImage(std::string filename)
{
SDL_Surface* loaded_image = 0, compatible_image = 0;
if (!filename.c_str())
return 0;
loaded_image = IMG_Load(filename.c_str());
if (!loaded_image)
return 0;
compatible_image = SDL_DisplayFormat(loaded_image);
SDL_FreeSurface(loaded_image);
return compatible_image;
}
Ama çizgi compatible_image = SDL_DisplayFormat(loaded_image);
ulaşıldığında, uygulama, uncatchable hariç durur (hatta try { /* ... */ } catch (...) { /* ... */ }
yardımcı olmuyor). 'un SDL_DisplayFormatAlpha()
ile değiştirilmesi de yardımcı olmadı. Yani, ben sadece istisna-trowable hatları kaldırıldı ve görüntüleri yüklemek için çalışan bu kodu almak:
SDL_Surface *LoadImage(std::string filename)
{
if (!filename.c_str())
return 0;
return IMG_Load(filename.c_str());
}
Ve böyle nahoş bir şey buldum: Bazı peri başka birinin şeffaf parçaları ile üst üste bindiğinde, eserler görünür. Böyle bir şey:
Ben bu basit algoritma ile benim "kahraman" animasyon ediyorum:
// SDL_Surface sprite = LoadImage("hero.bmp");
// hero.bmp contains animation frames followed one-by-one in a single line
// spriteFrameCnt is a number of animation frames
// spriteWidth and spriteHeight contain single frame params
SDL_Rect srcRect;
srcRect.x = spriteFrame * spriteWidth;
srcRect.w = spriteWidth;
srcRect.y = 0;
srcRect.h = spriteHeight;
spriteFrame = ++spriteFrame % spriteFrameCnt;
SDL_BlitSurface(sprite, &srcRect, screen, &rcSprite);
Bu nasıl açıklanabilir ve düzeltilebilir? Bu sorun, ama sen SDL_DisplayFormat
Evet, şimdi istisna atılmadı. Sayende. Ama eserler, nasıl denerim olursa olsun gitmedi. – shybovycha