diff options
| author | Jeff Epler <jeff@adafruit.com> | 2021-03-18 18:41:35 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-18 18:41:35 -0500 |
| commit | d0125617fd9b2652faa1f3c9a88277304fcc66c4 (patch) | |
| tree | a777183fc0c1fccd6ded2832389be0772ea03527 /shared-module | |
| parent | 623ece2c73b1a7886695fc09bde82f79ae47b3d7 (diff) | |
| parent | c37a1f45f3f03652ec9b9e998e4c1b3a50b2303e (diff) | |
Merge pull request #4428 from kmatch98/bitmap-read-2
Add `reverse_rows` to speedy bitmaptools.readinto function
Diffstat (limited to 'shared-module')
| -rw-r--r-- | shared-module/bitmaptools/__init__.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/shared-module/bitmaptools/__init__.c b/shared-module/bitmaptools/__init__.c index 73c8e2f90..5f105ea33 100644 --- a/shared-module/bitmaptools/__init__.c +++ b/shared-module/bitmaptools/__init__.c @@ -404,7 +404,7 @@ void common_hal_bitmaptools_arrayblit(displayio_bitmap_t *self, void *data, int displayio_bitmap_set_dirty_area(self, x1, y1, x2, y2); } -void common_hal_bitmaptools_readinto(displayio_bitmap_t *self, pyb_file_obj_t *file, int element_size, int bits_per_pixel, bool reverse_pixels_in_element, bool swap_bytes) { +void common_hal_bitmaptools_readinto(displayio_bitmap_t *self, pyb_file_obj_t *file, int element_size, int bits_per_pixel, bool reverse_pixels_in_element, bool swap_bytes, bool reverse_rows) { uint32_t mask = (1 << common_hal_displayio_bitmap_get_bits_per_value(self)) - 1; if (self->read_only) { @@ -415,10 +415,12 @@ void common_hal_bitmaptools_readinto(displayio_bitmap_t *self, pyb_file_obj_t *f size_t rowsize = element_size * elements_per_row; size_t rowsize_in_u32 = (rowsize + sizeof(uint32_t) - 1) / sizeof(uint32_t); size_t rowsize_in_u16 = (rowsize + sizeof(uint16_t) - 1) / sizeof(uint16_t); + for (int y = 0; y < self->height; y++) { uint32_t rowdata32[rowsize_in_u32]; uint16_t *rowdata16 = (uint16_t *)rowdata32; uint8_t *rowdata8 = (uint8_t *)rowdata32; + const int y_draw = reverse_rows ? (self->height) - 1 - y : y; UINT bytes_read = 0; if (f_read(&file->fp, rowdata32, rowsize, &bytes_read) != FR_OK || bytes_read != rowsize) { @@ -481,8 +483,7 @@ void common_hal_bitmaptools_readinto(displayio_bitmap_t *self, pyb_file_obj_t *f value = rowdata32[x]; break; } - - displayio_bitmap_write_pixel(self, x, y, value & mask); + displayio_bitmap_write_pixel(self, x, y_draw, value & mask); } } |
