Closed
Description
CircuitPython version
Adafruit CircuitPython 9.0.0-alpha.6 on 2023-12-12; Adafruit Matrix Portal M4 with samd51j19
Code/REPL
import board
import displayio
import framebufferio
import rgbmatrix
displayio.release_displays() # Release current display, we'll create our own
# Create RGB matrix object for a chain of four 64x32 matrices tiled into
# a single 128x64 pixel display -- two matrices across, two down, with the
# second row being flipped. width and height args are the combined size of
# all the tiled sub-matrices. tile arg is the number of rows of matrices in
# the chain (horizontal tiling is implicit from the width argument, doesn't
# need to be specified, but vertical tiling must be explicitly stated).
# The serpentine argument indicates whether alternate rows are flipped --
# cabling is easier this way, downside is colors may be slightly different
# when viewed off-angle. bit_depth and pins are same as other examples.
MATRIX = rgbmatrix.RGBMatrix(
width=128, height=64, bit_depth=6, tile=2, serpentine=True,
rgb_pins=[board.MTX_R1,
board.MTX_G1,
board.MTX_B1,
board.MTX_R2,
board.MTX_G2,
board.MTX_B2],
addr_pins=[board.MTX_ADDRA,
board.MTX_ADDRB,
board.MTX_ADDRC,
board.MTX_ADDRD],
clock_pin=board.MTX_CLK, latch_pin=board.MTX_LAT,
output_enable_pin=board.MTX_OE)
# Associate matrix with a Display to use displayio features
DISPLAY = framebufferio.FramebufferDisplay(MATRIX, auto_refresh=False,
rotation=0)
# Load BMP image, create Group and TileGrid to hold it
FILENAME = "/code/team0_logos/NYJ.bmp"
# CircuitPython 6 & 7 compatible
BITMAP = displayio.OnDiskBitmap(open(FILENAME, "rb"))
TILEGRID = displayio.TileGrid(
BITMAP,
pixel_shader=getattr(BITMAP, 'pixel_shader', displayio.ColorConverter()),
tile_width=BITMAP.width,
tile_height=BITMAP.height
)
# # CircuitPython 7+ compatible
# BITMAP = displayio.OnDiskBitmap(FILENAME)
# TILEGRID = displayio.TileGrid(
# BITMAP,
# pixel_shader=BITMAP.pixel_shader,
# tile_width=BITMAP.width,
# tile_height=BITMAP.height
# )
GROUP = displayio.Group()
GROUP.append(TILEGRID)
DISPLAY.root_group = GROUP
DISPLAY.refresh()
# Nothing interactive, just hold the image there
while True:
pass
Behavior
Images look corrupted / weird (look at uploaded file)
Description
Only happens with some bitmap files. Maybe because the bitmaps palette index 0 is while and 255 is black?
Additional information
I was messing around with my own build of circuit python and discovered that it looks like `displayio_convert_color' treats the color as a rgb332 color because colorspace.depth is 8 right. Or would it be 24.
I have 4 displays running and the code is running as a .mpy file from a sd card
Here is the bmp I used.
NYJ.bmp.zip
Here is all the bmp files that don't work
Bitmaps.zip
And this bitmap works
wales.bmp.zip