Look at /usr/include/linux/fb.h at structs like fb_var_screeninfo. There can be a variety of color depths and formats. I see 16 bits/pixel way too often, right now I have 32. Type fbset by itself and it will display the current settings. Which will almost certainly be one of the entries in /etc/fb.modes.
upstairs# fbset
mode "1920x1080"
geometry 1920 1080 1920 1080 32
timings 0 0 0 0 0 0 0
rgba 8/16,8/8,8/0,8/24
endmode
Imagemagick might work if you can make it match exactly the mode you need. I'd probably write something in C, a dozen or so lines calling libjpeg or libpng can decompress an image into a memory array. Your bits/color etc. needs to match or you need to write something to convert it. Good experience.
Also rather than reading/writing /dev/fb0 as a file, open() it to get a file descriptor then mmap() it so you're working with a pointer to the memory. It's much faster at doing transfers, at least 10x.
But for putting images on the screen I just install qiv. Then hit F1 for help, but an x while displaying an image will write it semi-permanently to the root window if that's what you want. Or just set it as wallpaper in Desktop Preferences and it will come up every boot.