And here is also the source code if someone wants to have a look or make modifications. As you can see it's not very complicated.
Code:
// usbd480_showimage.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "FreeImage.h"
#include "USBD480_lib.h"
int _tmain(int argc, char* argv[])
{
FIBITMAP *dib = NULL;
FIBITMAP *dib_565 = NULL;
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
unsigned char *data;
DisplayInfo myDisplay;
char fileName[1024];
int slen;
if(argc>1)
{
slen = strlen(argv[1]);
if(slen>=1024)
return 0;
strncpy(fileName, argv[1], 1024);
printf("Showing file: %s\n", fileName);
}
else
{
printf("Give the file name as a parameter.\n");
printf("Example: usbd480_showimage myimage.bmp\n");
return 0;
}
int displays = USBD480_GetNumberOfDisplays();
if(displays < 1)
{
fprintf(stdout, "No displays found\n\r");
return 0;
}
int ret = USBD480_GetDisplayConfiguration(0, &myDisplay);
ret = USBD480_Open(&myDisplay, 0);
if(ret != USBD480_OK)
{
fprintf(stdout, "Unable to open display\n\r");
}
// check the file signature and deduce its format
// (the second argument is currently not used by FreeImage)
fif = FreeImage_GetFileType(fileName, 0);
if(fif == FIF_UNKNOWN)
{
// no signature ?
// try to guess the file format from the file extension
fif = FreeImage_GetFIFFromFilename(fileName);
}
// check that the plugin has reading capabilities ...
if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif))
{
// ok, let's load the file
dib = FreeImage_Load(fif, fileName, 0);
}
if (dib != NULL)
{
//fwprintf(stdout, L"dib ok w: %d h: %d\n", FreeImage_GetWidth(dib), FreeImage_GetHeight(dib));
if(FreeImage_GetWidth(dib)!=480 || FreeImage_GetHeight(dib)!=272)
{
printf("Image size needs to be 480 x 272 pixels");
return 0;
}
dib_565 = FreeImage_ConvertTo16Bits565(dib);
unsigned char *bits = FreeImage_GetBits(dib_565);
data = (unsigned char*)malloc(262144);
unsigned char* inv_bits = (unsigned char *)bits+480*271*2;
unsigned char* data_ptr = data;
// the bitmap lines are stored upside down so invert them here and place to the data buffer
int i, j;
for(i=0;i<272;i++)
{
for(j=0;j<480;j++)
{
*data_ptr++ = *inv_bits++;
*data_ptr++ = *inv_bits++;
}
inv_bits-=480*2*2;
}
USBD480_SetAddress(&myDisplay, 0);
USBD480_SetFrameStartAddress(&myDisplay, 0);
USBD480_DrawFullScreen(&myDisplay, data);
USBD480_Close(&myDisplay);
if(data)
free(data);
// free the dib
if(dib)
FreeImage_Unload(dib);
if(dib_565)
FreeImage_Unload(dib_565);
}
else
{
fprintf(stdout, "NULL dib?\n");
}
return 0;
}