summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/bitmaptools/__init__.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/shared-module/bitmaptools/__init__.c b/shared-module/bitmaptools/__init__.c
index 4e0d72452..2d6aadee7 100644
--- a/shared-module/bitmaptools/__init__.c
+++ b/shared-module/bitmaptools/__init__.c
@@ -403,7 +403,7 @@ void common_hal_bitmaptools_arrayblit(displayio_bitmap_t *self, void *data, int
}
}
-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) {
@@ -414,10 +414,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++) {
+
+ 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;
+ 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) {
@@ -480,8 +482,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);
}
}