mirror of
https://github.com/dborth/vbagx.git
synced 2024-11-22 10:39:18 +01:00
load cover images directly from file instead of an intermediary buffer
This commit is contained in:
parent
fbbb4ce0b7
commit
2cf4a1c4aa
@ -929,6 +929,16 @@ static void WindowCredits(void * ptr)
|
||||
* Displays a list of games on the specified load device, and allows the user
|
||||
* to browse and select from this list.
|
||||
***************************************************************************/
|
||||
static char* getImageFolder()
|
||||
{
|
||||
switch(GCSettings.PreviewImage)
|
||||
{
|
||||
case 1 : return GCSettings.CoverFolder; break;
|
||||
case 2 : return GCSettings.ArtworkFolder; break;
|
||||
default: return GCSettings.ScreenshotsFolder; break;
|
||||
}
|
||||
}
|
||||
|
||||
static int MenuGameSelection()
|
||||
{
|
||||
int menu = MENU_NONE;
|
||||
@ -1098,27 +1108,18 @@ static int MenuGameSelection()
|
||||
{
|
||||
previousBrowserIndex = browser.selIndex;
|
||||
previousPreviewImg = GCSettings.PreviewImage;
|
||||
snprintf(imagePath, MAXJOLIET, "%s%s/%s.png", pathPrefix[GCSettings.LoadMethod], ImageFolder(), browserList[browser.selIndex].displayname);
|
||||
snprintf(imagePath, MAXJOLIET, "%s%s/%s.png", pathPrefix[GCSettings.LoadMethod], getImageFolder(), browserList[browser.selIndex].displayname);
|
||||
|
||||
AllocSaveBuffer();
|
||||
int width, height;
|
||||
if(LoadFile(imagePath, SILENT))
|
||||
if(DecodePNGFromFile(imagePath, &width, &height, imgBuffer, 512, 512))
|
||||
{
|
||||
if(DecodePNG(savebuffer, &width, &height, imgBuffer, 512, 512))
|
||||
{
|
||||
preview.SetImage(imgBuffer, width, height);
|
||||
preview.SetScale( MIN(225.0f / width, 235.0f / height) );
|
||||
}
|
||||
else
|
||||
{
|
||||
preview.SetImage(NULL, 0, 0);
|
||||
}
|
||||
preview.SetImage(imgBuffer, width, height);
|
||||
preview.SetScale( MIN(225.0f / width, 235.0f / height) );
|
||||
}
|
||||
else
|
||||
{
|
||||
preview.SetImage(NULL, 0, 0);
|
||||
}
|
||||
FreeSaveBuffer();
|
||||
}
|
||||
|
||||
if(settingsBtn.GetState() == STATE_CLICKED)
|
||||
|
@ -98,10 +98,6 @@ static int pngu_info (IMGCTX ctx)
|
||||
|
||||
else if (ctx->source == PNGU_SOURCE_DEVICE)
|
||||
{
|
||||
// Open file
|
||||
if (!(ctx->fd = fopen (ctx->filename, "rb")))
|
||||
return PNGU_CANT_OPEN_FILE;
|
||||
|
||||
// Load first 8 bytes into magic buffer
|
||||
if (fread (magic, 1, 8, ctx->fd) != 8)
|
||||
{
|
||||
@ -472,7 +468,6 @@ static u8 * PNGU_DecodeTo4x4RGBA8 (IMGCTX ctx, u32 width, u32 height, int * dstW
|
||||
return dst;
|
||||
}
|
||||
|
||||
|
||||
int PNGU_DecodeTo4x4RGB565 (IMGCTX ctx, u32 width, u32 height, void *buffer)
|
||||
{
|
||||
int result;
|
||||
@ -632,6 +627,29 @@ u8 * DecodePNG(const u8 *src, int * width, int * height, u8 *dstPtr, int maxwidt
|
||||
return dst;
|
||||
}
|
||||
|
||||
u8 * DecodePNGFromFile(const char *filepath, int * width, int * height, u8 *dstPtr, int maxwidth, int maxheight)
|
||||
{
|
||||
FILE *file = fopen (filepath, "rb");
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
IMGCTX ctx = PNGU_SelectImageFromDevice(filepath);
|
||||
|
||||
if(!ctx)
|
||||
return NULL;
|
||||
|
||||
ctx->fd = file;
|
||||
PNGUPROP imgProp;
|
||||
u8 *dst = NULL;
|
||||
|
||||
if(PNGU_GetImageProperties(ctx, &imgProp) == PNGU_OK && imgProp.imgWidth <= maxwidth && imgProp.imgHeight < maxheight)
|
||||
dst = PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, width, height, dstPtr, maxwidth, maxheight);
|
||||
|
||||
PNGU_ReleaseImageContext (ctx);
|
||||
return dst;
|
||||
}
|
||||
|
||||
int PNGU_EncodeFromRGB (IMGCTX ctx, u32 width, u32 height, void *buffer, u32 stride)
|
||||
{
|
||||
png_uint_32 rowbytes;
|
||||
|
@ -76,6 +76,7 @@ int PNGU_GetImageProperties (IMGCTX ctx, PNGUPROP *fileproperties);
|
||||
****************************************************************************/
|
||||
|
||||
u8 * DecodePNG(const u8 *src, int *width, int *height, u8 *dst, int maxwidth, int maxheight);
|
||||
u8 * DecodePNGFromFile(const char *filepath, int *width, int *height, u8 *dst, int maxwidth, int maxheight);
|
||||
int PNGU_EncodeFromRGB (IMGCTX ctx, u32 width, u32 height, void *buffer, u32 stride);
|
||||
int PNGU_EncodeFromGXTexture (IMGCTX ctx, u32 width, u32 height, void *buffer, u32 stride);
|
||||
int PNGU_EncodeFromEFB (IMGCTX ctx, u32 width, u32 height);
|
||||
|
@ -470,13 +470,3 @@ int main(int argc, char *argv[])
|
||||
} // main loop
|
||||
return 0;
|
||||
}
|
||||
|
||||
char* ImageFolder()
|
||||
{
|
||||
switch(GCSettings.PreviewImage)
|
||||
{
|
||||
case 1 : return GCSettings.CoverFolder; break;
|
||||
case 2 : return GCSettings.ArtworkFolder; break;
|
||||
default: return GCSettings.ScreenshotsFolder; break;
|
||||
}
|
||||
}
|
||||
|
@ -116,8 +116,6 @@ struct SGCSettings
|
||||
char smbshare[20];
|
||||
};
|
||||
|
||||
char* ImageFolder();
|
||||
|
||||
void ExitApp();
|
||||
void ShutdownWii();
|
||||
bool SupportedIOS(u32 ios);
|
||||
|
Loading…
Reference in New Issue
Block a user