ST意法半导体
直播中

莫联雪

8年用户 1170经验值
私信 关注
[问答]

用于灰度输入的STM32H7 JPEG编码,编码无法完整其转换的原因?

你好
我正在尝试以灰度格式对 (160*120) 的图像进行编码 - 即 1bpp 色深的 bmp 文件。
不幸的是,编码器无法完成其转换。并且不会调用“HAL_JPEG_EncodeCpltCallback”。
我的设置基于来自 ST 的“JPEG_EncodingUsingFs_DMA”,虽然此示例是为 24 位像素深度设计的,但我尝试为我的应用程序修改它——将“ReadBmpRgbLines”更改为仅读取一种颜色:
  • static void ReadBmpRgbLines(FIL *file, JPEG_ConfTypeDef Conf, uint8_t * pDataBuffer, uint32_t *BufferSize)
  • {
  •         uint32_t bytesReadfile    = 1;
  •         uint32_t CurrentBlockLine = 1;
  •         *BufferSize = 0;
  •         while((CurrentLine <= Conf.ImageHeight) && (CurrentBlockLine <= MAX_INPUT_LINES))
  •         {
  •                 f_lseek (file,BMP_HEADER_SIZE + Conf.ImageWidth *(Conf.ImageHeight - CurrentLine)*1);
  •                 f_read (file, pDataBuffer , Conf.ImageWidth*1 , (UINT*)(&bytesReadfile));
  •                 pDataBuffer += bytesReadfile;
  •                 *BufferSize += bytesReadfile;
  •                 CurrentLine +=1 ;
  •                 CurrentBlockLine += 1;
  •         }
  • }
我的编码器值如下:
  • #define JPEG_RGB_FORMAT JPEG_RGB888
  • #define JPEG_CHROMA_SAMPLING   JPEG_444_SUBSAMPLING
  • #define JPEG_COLOR_SPACE     JPEG_YCBCR_COLORSPACE
  • #define JPEG_IMAGE_QUALITY    100
  • #define MAX_INPUT_WIDTH     800
  • #define MAX_INPUT_LINES     8
我注意到为生成新的 MCU 块而调用的函数“卡在”同一 bmp 图像行上。
任何人都可以发送有关此问题的提示吗?我必须为编码器设置不同的参数吗?

回帖(1)

陈蕾

2023-2-6 10:55:46
他们不支持适当的转换功能。
然后,假装你拥有 RGB88 会更容易 - 只需重复三次灰度值即可。


  • static void ReadBmpRgbLines(FIL *file, JPEG_ConfTypeDef Conf, uint8_t * pDataBuffer, uint32_t *BufferSize)
  • {
  •         uint32_t bytesReadfile    = 1;
  •         uint32_t CurrentBlockLine = 1;
  •         *BufferSize = 0;
  •         uint8_t workbuffer[200];
  •         int i;


  •         while((CurrentLine <= Conf.ImageHeight) && (CurrentBlockLine <= MAX_INPUT_LINES))
  •         {
  •                 f_lseek (file,BMP_HEADER_SIZE + Conf.ImageWidth *(Conf.ImageHeight - CurrentLine)*1);
  •                 f_read (file, workbuffer , Conf.ImageWidth*1 , (UINT*)(&bytesReadfile));


  •                 for (i = 0; i < Conf.ImageWidth; i++)
  •                 {
  •                    *pDataBuffer++= workbuffer;
  •                    *pDataBuffer++= workbuffer;
  •                    *pDataBuffer++= workbuffer;
  •                 }
  •                 *BufferSize += bytesReadfile * 3;
  •                 CurrentLine +=1 ;
  •                 CurrentBlockLine += 1;
  •         }
  • }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分