2x banner images!

This commit is contained in:
comex
2013-09-25 03:05:36 -04:00
parent 0787019cbe
commit 18abc33306
14 changed files with 112 additions and 72 deletions

View File

@ -26,7 +26,7 @@ class IBannerLoader
virtual bool IsValid() = 0;
virtual bool GetBanner(u32* _pBannerImage) = 0;
virtual std::vector<u32> GetBanner(int* pWidth, int* pHeight) = 0;
virtual std::vector<std::string> GetNames() = 0;
virtual std::string GetCompany() = 0;

View File

@ -50,17 +50,15 @@ bool CBannerLoaderGC::IsValid()
return m_IsValid;
}
bool CBannerLoaderGC::GetBanner(u32* _pBannerImage)
std::vector<u32> CBannerLoaderGC::GetBanner(int* pWidth, int* pHeight)
{
if (!IsValid())
{
return false;
}
std::vector<u32> Buffer;
Buffer.resize(DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT);
auto const pBanner = (DVDBanner*)m_pBannerFile;
decode5A3image(_pBannerImage, pBanner->image, DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT);
return true;
decode5A3image(&Buffer[0], pBanner->image, DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT);
*pWidth = DVD_BANNER_WIDTH;
*pHeight = DVD_BANNER_HEIGHT;
return std::move(Buffer);
}

View File

@ -20,7 +20,7 @@ class CBannerLoaderGC
virtual bool IsValid();
virtual bool GetBanner(u32* _pBannerImage);
virtual std::vector<u32> GetBanner(int* pWidth, int* pHeight);
virtual std::vector<std::string> GetNames();
virtual std::string GetCompany();

View File

@ -98,38 +98,15 @@ bool CBannerLoaderWii::IsValid()
return m_IsValid;
}
static inline u32 Average32(u32 a, u32 b) {
return ((a >> 1) & 0x7f7f7f7f) + ((b >> 1) & 0x7f7f7f7f);
}
static inline u32 GetPixel(u32 *buffer, unsigned int x, unsigned int y) {
// thanks to unsignedness, these also check for <0 automatically.
if (x > 191) return 0;
if (y > 63) return 0;
return buffer[y * 192 + x];
}
bool CBannerLoaderWii::GetBanner(u32* _pBannerImage)
std::vector<u32> CBannerLoaderWii::GetBanner(int* pWidth, int* pHeight)
{
if (IsValid())
{
SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
u32* Buffer = new u32[192 * 64];
decode5A3image(Buffer, (u16*)pBanner->m_BannerTexture, 192, 64);
for (int y = 0; y < 32; y++)
{
for (int x = 0; x < 96; x++)
{
// simplified plus-shaped "gaussian"
u32 surround = Average32(
Average32(GetPixel(Buffer, x*2 - 1, y*2), GetPixel(Buffer, x*2 + 1, y*2)),
Average32(GetPixel(Buffer, x*2, y*2 - 1), GetPixel(Buffer, x*2, y*2 + 1)));
_pBannerImage[y * 96 + x] = Average32(GetPixel(Buffer, x*2, y*2), surround);
}
}
delete[] Buffer;
}
return true;
SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
std::vector<u32> Buffer;
Buffer.resize(192 * 64);
decode5A3image(&Buffer[0], (u16*)pBanner->m_BannerTexture, 192, 64);
*pWidth = 192;
*pHeight = 64;
return std::move(Buffer);
}
bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::string& result)

View File

@ -20,7 +20,7 @@ class CBannerLoaderWii
virtual bool IsValid();
virtual bool GetBanner(u32* _pBannerImage);
virtual std::vector<u32> GetBanner(int* pWidth, int* pHeight);
virtual std::vector<std::string> GetNames();
virtual std::string GetCompany();