mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Add font rendering
This commit is contained in:
parent
ee2ba469d8
commit
5fdd6e09a3
@ -134,6 +134,7 @@ OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/img/,\
|
|||||||
fast.o \
|
fast.o \
|
||||||
freak.o \
|
freak.o \
|
||||||
template.o \
|
template.o \
|
||||||
|
font.o \
|
||||||
)
|
)
|
||||||
|
|
||||||
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/py/, \
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/py/, \
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit 84078f85a5135bf83d6bdd655740ac89a97145fd
|
Subproject commit 33375af4e1e441ad6767102439fe9fe829b3b596
|
||||||
@ -42,6 +42,7 @@ SRCS += $(addprefix img/, \
|
|||||||
fast.c \
|
fast.c \
|
||||||
freak.c \
|
freak.c \
|
||||||
template.c \
|
template.c \
|
||||||
|
font.c \
|
||||||
)
|
)
|
||||||
|
|
||||||
SRCS += $(addprefix py/, \
|
SRCS += $(addprefix py/, \
|
||||||
|
|||||||
1073
src/omv/img/font.c
Normal file
1073
src/omv/img/font.c
Normal file
File diff suppressed because it is too large
Load Diff
9
src/omv/img/font.h
Normal file
9
src/omv/img/font.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef __FONT_H__
|
||||||
|
#define __FONT_H__
|
||||||
|
typedef struct {
|
||||||
|
int w;
|
||||||
|
int h;
|
||||||
|
uint8_t data[10];
|
||||||
|
} glyph_t;
|
||||||
|
extern const glyph_t font[95];
|
||||||
|
#endif //__FONT_H__
|
||||||
@ -7,6 +7,7 @@
|
|||||||
#include "ff.h"
|
#include "ff.h"
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "mdefs.h"
|
#include "mdefs.h"
|
||||||
|
#include "font.h"
|
||||||
#define MIN(a,b) \
|
#define MIN(a,b) \
|
||||||
({ __typeof__ (a) _a = (a); \
|
({ __typeof__ (a) _a = (a); \
|
||||||
__typeof__ (b) _b = (b); \
|
__typeof__ (b) _b = (b); \
|
||||||
@ -600,7 +601,6 @@ void imlib_draw_rectangle(struct image *image, struct rectangle *r)
|
|||||||
image->pixels[(y+i)*col + x + w+1] = c;
|
image->pixels[(y+i)*col + x + w+1] = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void imlib_draw_circle(struct image *image, int cx, int cy, int r)
|
void imlib_draw_circle(struct image *image, int cx, int cy, int r)
|
||||||
@ -647,6 +647,27 @@ void imlib_draw_line(image_t *src, int x0, int y0, int x1, int y1)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO check image bounds
|
||||||
|
void imlib_draw_string(image_t *image, int x_off, int y_off, const char *str)
|
||||||
|
{
|
||||||
|
const glyph_t *g;
|
||||||
|
uint16_t *data = (uint16_t*)image->pixels;
|
||||||
|
for(char c; (c=*str); str++) {
|
||||||
|
if (c < ' ' || c > '~') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
g = &font[c-' '];
|
||||||
|
for (int y=0; y<g->h; y++) {
|
||||||
|
for (int x=0; x<g->w; x++) {
|
||||||
|
if (g->data[y] & (0x80>>x)){
|
||||||
|
data[(y_off+y)*image->w+x_off+x]=0xFFFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x_off += g->w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void imlib_histeq(struct image *src)
|
void imlib_histeq(struct image *src)
|
||||||
{
|
{
|
||||||
int i, sum;
|
int i, sum;
|
||||||
|
|||||||
@ -196,6 +196,7 @@ int16_t *freak_match_keypoints(kp_t *kpts1, int kpts1_size, kp_t *kpts2, int kpt
|
|||||||
void imlib_draw_rectangle(struct image *image, struct rectangle *r);
|
void imlib_draw_rectangle(struct image *image, struct rectangle *r);
|
||||||
void imlib_draw_circle(struct image *image, int cx, int cy, int r);
|
void imlib_draw_circle(struct image *image, int cx, int cy, int r);
|
||||||
void imlib_draw_line(image_t *src, int x0, int y0, int x1, int y1);
|
void imlib_draw_line(image_t *src, int x0, int y0, int x1, int y1);
|
||||||
|
void imlib_draw_string(image_t *src, int x, int y, const char *str);
|
||||||
|
|
||||||
/* Misc */
|
/* Misc */
|
||||||
void imlib_scale(struct image *src, struct image *dst, interp_t interp);
|
void imlib_scale(struct image *src, struct image *dst, interp_t interp);
|
||||||
|
|||||||
@ -353,6 +353,27 @@ static mp_obj_t py_image_draw_circle(mp_obj_t image_obj, mp_obj_t c_obj, mp_obj_
|
|||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static mp_obj_t py_image_draw_string(mp_obj_t image_obj, mp_obj_t offset_obj, mp_obj_t str_obj)
|
||||||
|
{
|
||||||
|
int x,y;
|
||||||
|
image_t *image = NULL;
|
||||||
|
|
||||||
|
// get image pointer
|
||||||
|
image = py_image_cobj(image_obj);
|
||||||
|
|
||||||
|
// get x,y offset
|
||||||
|
mp_obj_t *array;
|
||||||
|
mp_obj_get_array_fixed_n(offset_obj, 2, &array);
|
||||||
|
x = mp_obj_get_int(array[0]);
|
||||||
|
y = mp_obj_get_int(array[1]);
|
||||||
|
|
||||||
|
// get string to draw
|
||||||
|
const char *str = mp_obj_str_get_str(str_obj);
|
||||||
|
imlib_draw_string(image, x, y, str);
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static mp_obj_t py_image_erode(mp_obj_t image_obj, mp_obj_t ksize_obj)
|
static mp_obj_t py_image_erode(mp_obj_t image_obj, mp_obj_t ksize_obj)
|
||||||
{
|
{
|
||||||
image_t *image = NULL;
|
image_t *image = NULL;
|
||||||
@ -713,6 +734,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(py_image_morph_obj, py_image_morph);
|
|||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(py_image_draw_circle_obj, py_image_draw_circle);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_3(py_image_draw_circle_obj, py_image_draw_circle);
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(py_image_draw_rectangle_obj, py_image_draw_rectangle);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(py_image_draw_rectangle_obj, py_image_draw_rectangle);
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(py_image_draw_keypoints_obj, py_image_draw_keypoints);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(py_image_draw_keypoints_obj, py_image_draw_keypoints);
|
||||||
|
STATIC MP_DEFINE_CONST_FUN_OBJ_3(py_image_draw_string_obj, py_image_draw_string);
|
||||||
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_image_find_blobs_obj, py_image_find_blobs);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_image_find_blobs_obj, py_image_find_blobs);
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(py_image_find_template_obj, py_image_find_template);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_3(py_image_find_template_obj, py_image_find_template);
|
||||||
@ -741,6 +763,7 @@ static const mp_map_elem_t locals_dict_table[] = {
|
|||||||
{MP_OBJ_NEW_QSTR(MP_QSTR_draw_circle), (mp_obj_t)&py_image_draw_circle_obj},
|
{MP_OBJ_NEW_QSTR(MP_QSTR_draw_circle), (mp_obj_t)&py_image_draw_circle_obj},
|
||||||
{MP_OBJ_NEW_QSTR(MP_QSTR_draw_rectangle), (mp_obj_t)&py_image_draw_rectangle_obj},
|
{MP_OBJ_NEW_QSTR(MP_QSTR_draw_rectangle), (mp_obj_t)&py_image_draw_rectangle_obj},
|
||||||
{MP_OBJ_NEW_QSTR(MP_QSTR_draw_keypoints), (mp_obj_t)&py_image_draw_keypoints_obj},
|
{MP_OBJ_NEW_QSTR(MP_QSTR_draw_keypoints), (mp_obj_t)&py_image_draw_keypoints_obj},
|
||||||
|
{MP_OBJ_NEW_QSTR(MP_QSTR_draw_string), (mp_obj_t)&py_image_draw_string_obj},
|
||||||
|
|
||||||
/* objects/feature detection */
|
/* objects/feature detection */
|
||||||
{MP_OBJ_NEW_QSTR(MP_QSTR_find_blobs), (mp_obj_t)&py_image_find_blobs_obj},
|
{MP_OBJ_NEW_QSTR(MP_QSTR_find_blobs), (mp_obj_t)&py_image_find_blobs_obj},
|
||||||
|
|||||||
BIN
usr/font.ttf
BIN
usr/font.ttf
Binary file not shown.
Loading…
Reference in New Issue
Block a user