I’m building a sign that displays different still images over time. Each full display is comprised of a handful of bitmap images of known dimensions. There are thousands of these images, and their pixels will correlate 1-1 with those on the LED display.
Is there a fast way to load subset bitmap images at various x,y offsets, or does each matrix need to be populated one pixel at a time?
no, there is not. I asked @hzeller that same question and he told me pixels do have to be pushed one at a time in a loop due to how the bitmap planes that get pushed at high speed, get created (one reason being that pixels in those bitplanes are not necessarily in the same order).
For my own GitHub - marcmerlin/FastLED_RPIRGBPanel_GFX: Run Arduino Code on rPi and display a FrameBuffer::GFX display on an RGBPanel at higher resolution than arduino chips, can , I have a 24bpp framebuffer from GitHub - marcmerlin/Framebuffer_GFX: Framebuffer::GFX is base Class for SmartMatrix::GFX, NeoMatrix::GFX, FastLED_SPITFT_GFX, FastLED_RPIRGBPanel_GFX, FastLED_TFTWrapper_GFX, and more and indeed I also need to push it pixel per pixel.
Great, thank you @marcmerlin . I’ll probably pull in all the graphic parts into one large structure. It may be around 10MB, but that will be faster than lots of file access and decoding.
if I may, are you sure this is necessary?
the rPI is not slow, I don’t see an issue with loading the files one by one and decoding them on the fly, unless you’re trying to do something like 100fps or somesuch which basically would be hfr video from a bunch of pictures
Maybe not, but it just seems superfluous to decode lots of bmp files all the time. I could convert them all to some simple RGB csv files, which would then be read on the fly. Simple to read, and only a small subset will be in memory at the same time.
Thank you for nudging me in the right direction!
makes sense, just pointing out that before doing such extra coding work,make sure it’s worth your time 
You can paste small images into a larger image in python using PIL image. For example:
img = Image.new(mode=“RGB”, size=[112,16])
img.paste(im = image1, box = [0, 0])
img.paste(im = image2, box = [48, 0])
img.paste(im = image3, box = [64,0])
And the images can be pretty much anything, bmp, jpg, png, etc. The box parameter contains the coordinates of the upper left corner. The PIL Image origin is the upper left corner.