mirror of
https://github.com/pimoroni/st7735-python.git
synced 2025-01-05 22:40:25 +03:00
Use NumPy for image_to_data conversion
This commit is contained in:
@@ -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."""
|
||||
|
||||
@@ -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
62
examples/image_timed.py
Normal 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()
|
||||
Reference in New Issue
Block a user