Use NumPy for image_to_data conversion

This commit is contained in:
matt448
2014-10-05 20:54:31 +00:00
parent 7fba862fdd
commit 96242627c1
3 changed files with 69 additions and 10 deletions

View File

@@ -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."""

View File

@@ -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:

62
examples/image_timed.py Normal file
View File

@@ -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()