diff --git a/Adafruit_ILI9341/ILI9341.py b/Adafruit_ILI9341/ILI9341.py index 8892e69..4db606c 100644 --- a/Adafruit_ILI9341/ILI9341.py +++ b/Adafruit_ILI9341/ILI9341.py @@ -20,6 +20,7 @@ # THE SOFTWARE. import numbers import time +import numpy import Image import ImageDraw @@ -105,15 +106,11 @@ def color565(r, g, b): def image_to_data(image): """Generator function to convert a PIL image to 16-bit 565 RGB bytes.""" - pixels = image.convert('RGB').load() - width, height = image.size - for y in range(height): - for x in range(width): - r,g,b = pixels[(x,y)] - color = color565(r, g, b) - yield (color >> 8) & 0xFF - yield color & 0xFF - + #NumPy is much faster at doing this. NumPy code provided by: + #Keith (https://www.blogger.com/profile/02555547344016007163) + pb = np.array(image.convert('RGB')).astype('uint16') + color = ((pb[:,:,0] & 0xF8) << 8) | ((pb[:,:,1] & 0xFC) << 3) | (pb[:,:,2] >> 3) + return np.dstack(((color >> 8) & 0xFF, color & 0xFF)).flatten().tolist() class ILI9341(object): """Representation of an ILI9341 TFT LCD.""" diff --git a/README.md b/README.md index d187380..b612699 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ For all platforms (Raspberry Pi and Beaglebone Black) make sure you have the fol ```` sudo apt-get update -sudo apt-get install build-essential python-dev python-smbus python-pip python-imaging +sudo apt-get install build-essential python-dev python-smbus python-pip python-imaging python-numpy ```` For a Raspberry Pi make sure you have the RPi.GPIO library by executing: diff --git a/examples/image_timed.py b/examples/image_timed.py new file mode 100644 index 0000000..70106f2 --- /dev/null +++ b/examples/image_timed.py @@ -0,0 +1,62 @@ +# Copyright (c) 2014 Adafruit Industries +# Author: Tony DiCola +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +import Image +import time +import Adafruit_ILI9341 as TFT +import Adafruit_GPIO as GPIO +import Adafruit_GPIO.SPI as SPI + + +# Raspberry Pi configuration. +#DC = 18 +#RST = 23 +#SPI_PORT = 0 +#SPI_DEVICE = 0 + +# BeagleBone Black configuration. +DC = 'P9_15' +RST = 'P9_12' +SPI_PORT = 1 +SPI_DEVICE = 0 + +# Create TFT LCD display class. +disp = TFT.ILI9341(DC, rst=RST, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=64000000)) + +# Initialize display. +disp.begin() + +# Load an image. +print 'Loading image...' +image = Image.open('cat.jpg') + +# Resize the image and rotate it so it's 240x320 pixels. +image = image.rotate(90).resize((240, 320)) + +print 'Press Ctrl-C to exit' +while(True): + # Draw the image on the display hardware. + print 'Drawing image' + start_time = time.time() + disp.display(image) + end_time = time.time() + print 'Time to draw image: ' + str(end_time - start_time) + disp.clear((0, 0, 0)) + disp.display()