-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbitmap-crop.py
More file actions
114 lines (90 loc) · 3.35 KB
/
bitmap-crop.py
File metadata and controls
114 lines (90 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Typical command line:
# python bitmap-crop.py --connector ft4222module
import sys
# Add the library directories to the module search path.
sys.path.append('../..')
sys.path.append('../../bteve2')
import bteve2
# This module provides the connector to the EVE hardware.
import apprunner
def pad4(s):
while len(s) % 4:
s += b'\x00'
return s
def crop(eve, dst, src, x, y):
eve.CMD_DLSTART()
eve.CMD_RENDERTARGET(*dst)
eve.CMD_SETBITMAP(*src)
eve.BLEND_FUNC(eve.BLEND_ONE, eve.BLEND_ZERO)
eve.BEGIN(eve.BEGIN_BITMAPS)
eve.VERTEX_FORMAT(0)
eve.VERTEX2F(-x, -y)
eve.CMD_SWAP()
eve.CMD_GRAPHICSFINISH()
eve.LIB_AwaitCoProEmpty()
def image_crop(eve):
source_image = "assets/paris-1280.png"
block_addr = 0x400000 # allocate 4MB for base image
src = bteve2.Surface(0, eve.FORMAT_RGB565, 1280, 720)
eve.LIB_BeginCoProList()
eve.BEGIN(eve.BEGIN_BITMAPS)
eve.BITMAP_HANDLE(0)
# Tell coprocessor to load image from the SPI interface
eve.CMD_LOADIMAGE(src.addr, 0)
# Load the original image from the host hard disk
eve.cc(pad4(open(source_image, "rb").read()))
eve.CMD_SETBITMAP(*src)
eve.DISPLAY()
eve.CMD_SWAP()
eve.LIB_EndCoProList()
eve.LIB_AwaitCoProEmpty()
# start cropped images after base image allocation
buf_addr = block_addr
dst = bteve2.Surface(buf_addr, eve.FORMAT_RGB565, 320, 180)
for x in range(0, 1280, 320):
for y in range(0, 720, 180):
crop(eve, dst, src, x, y)
# adjust to next address
dst = bteve2.Surface(dst.addr + (320 * 180 * 2), dst.fmt, dst.w, dst.h)
# restore address
dst = bteve2.Surface(buf_addr, dst.fmt, dst.w, dst.h)
eve.LIB_BeginCoProList()
eve.CMD_DLSTART()
eve.CLEAR()
framebuffer = bteve2.Surface(eve.SWAPCHAIN_0, eve.FORMAT_RGB6, 1920, 1200)
eve.CMD_RENDERTARGET(*framebuffer)
eve.VERTEX_FORMAT(0) # integer coordinates
eve.BEGIN(eve.BEGIN_BITMAPS)
eve.BITMAP_HANDLE(0)
eve.CMD_SETBITMAP(*src)
eve.VERTEX2F(220, 210)
# assign a bitmap handle and reuse it for each cropped image
eve.BITMAP_HANDLE(1)
# top 4
eve.CMD_SETBITMAP(dst.addr, eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(100, 0)
eve.CMD_SETBITMAP(dst.addr + (4 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(500, 0)
eve.CMD_SETBITMAP(dst.addr + (8 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(900, 0)
eve.CMD_SETBITMAP(dst.addr + (12 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(1300, 0)
# bottom 4
eve.CMD_SETBITMAP(dst.addr + (3 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(100, 960)
eve.CMD_SETBITMAP(dst.addr + (7 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(500, 960)
eve.CMD_SETBITMAP(dst.addr + (11 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(900, 960)
eve.CMD_SETBITMAP(dst.addr + (15 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(1300, 960)
# side 2
eve.CMD_SETBITMAP(dst.addr + (13 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(1530, 370)
eve.CMD_SETBITMAP(dst.addr + (14 * 320 * 180 * 2), eve.FORMAT_RGB565, 320, 180)
eve.VERTEX2F(1530, 590)
eve.DISPLAY()
eve.CMD_SWAP()
eve.LIB_EndCoProList()
eve.LIB_AwaitCoProEmpty()
apprunner.run(image_crop)