Closed 4jakers18 closed 4 months ago
Hi,
Thanks for pointing out the mistake in the example. I have fixed it, and now it should be working properly.
The reason for this issue is due to the fact, of how panel controllers work. Typically, you set a valid area first, then you fill all the content as linear data (a linear byte array) to this area, line by line. By this nature, if you have set an invalid area, the picture is going to shift.
For example: You have a picture of a size 8x8. And the content will be:
b'\x00\x00\x00\x00\x00\x00\x00\x00' \
b'\x11\x11\x11\x11\x11\x11\x11\x11' \
b'\x00\x00\x00\x00\x00\x00\x00\x00' \
b'\x11\x11\x11\x11\x11\x11\x11\x11' \
b'\x00\x00\x00\x00\x00\x00\x00\x00' \
b'\x11\x11\x11\x11\x11\x11\x11\x11' \
b'\x00\x00\x00\x00\x00\x00\x00\x00' \
b'\x11\x11\x11\x11\x11\x11\x11\x11' \
Which is equivalent to:
# This is why I call it linear.
# And this is how the data will be sent to the display.
b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11\x11\x11\x11\x11\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11\x11\x11\x11\x11\x11\x11'
In case you have set the coordinate wrong, e.g. (0,1,8,8)
. Which is a 9x8 area, (8 - 0 + 1) x (8 - 1 + 1)
. What actually will be displayed is as the follows, say 0x00=*, 0x11=#
.
********#
#######**
******###
#####****
****#####
###******
**#######
#
So the picture is not what you wanted, which would be:
********
########
********
########
********
########
********
########
So basically, you have to calculate the correct value of the start point (x0, y0)
to the end point (x1,y1)
. Note that, there are (x1 - x0 + 1) x (y1 - y0 + 1)
pixels in total.
Hopefully this helps. Best regards.
Thank you, I'll give this a shot. This also confirms that my img_to_bitmap.py
script is indeed working properly, would that be something you'd be interesting having in the repository? I can make a PR for it.
If you write the code on your own, or you know the source of the code, you are free to make a PR. Otherwise will be difficult for me to get the license righ.
It's my own, I'll clean it up and PR!
When using the image_bitmap.py example, The logo.py bitmap displays improperly, it seems to be read in incorrect order, leading to it displaying "split" diagonally, as if someone cut the image from (x1,y0) to (x0,y1). I added some gradient lines to help me understand the coordinate system:
That results in:
I then decided to test
tft.rotation(0)
, using an image that should fit properly, a 240x240 picture of a cat. This was also to rule out the original logo.py being improperly formatted.That worked okay, but when trying
tft.rotation(1)
with that same image, the image doesn't appear to be read/displayed entirely:I was a little confused, so I tried adding an offset to the start/end points in different permutations until something worked, the best I got was with
tft.bitmap(0, 0, logo.WIDTH, logo.HEIGHT-1, logo.BITMAP)
, which resulted in a "split" image similar to before with logo.py:Not sure how I should proceed here. I can probably get around it for now by purposely adding the split in my original images to negate the split when displayed, but having to subtract from y1 still isn't making sense to me. Otherwise thanks for the driver!