Просмотр исходного кода

fix: lcd, 修复lcd使用解码后缓存图片较大时 y*width 超过 65535 会溢出造成大图片显示折叠的问题

zengeshuai 1 месяц назад
Родитель
Сommit
62ee6d0686
1 измененных файлов с 3 добавлено и 2 удалено
  1. 3 2
      components/lcd/luat_lib_lcd_jpg.c

+ 3 - 2
components/lcd/luat_lib_lcd_jpg.c

@@ -138,9 +138,10 @@ static int decode_out_func (JDEC* jd, void* bitmap, JRECT* rect){
     uint16_t* tmp = (uint16_t*)bitmap;
 
     // rgb高低位swap
-	uint16_t idx = 0;
+    uint16_t idx = 0;
 	for (size_t y = rect->top; y <= rect->bottom; y++){
-		uint16_t offset = y*buff_info->width + rect->left;
+        // 防止大图时 y*width 溢出 16bit,改用 size_t 计算偏移
+        size_t offset = (size_t)y * buff_info->width + rect->left;
 		for (size_t x = rect->left; x <= rect->right; x++){
 			if (lcd_dft_conf->endianness_swap)
 				buff_info->buff[offset] = ((tmp[idx] >> 8) & 0xFF)+ ((tmp[idx] << 8) & 0xFF00);