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
	 matt448
					matt448