在线时间13 小时
UID3733915
注册时间2023-6-5
NXP金币32
该用户从未签到
注册会员
- 积分
- 134
- 最后登录
- 2024-1-31
|
本帖最后由 eefocus_3733915 于 2023-9-25 16:05 编辑
请教下rt1176 csi camera rgb 例程颜色转换后的显示问题 ?
sdk 官方例程里面使用了 pxp ,显示出来的图片颜色是正常的,但就是如果想指定地址位置显示还没有搞清楚该怎么设置,所以自己另外单独搞了一个转换函数,自己搞的转换函数基本能够显示出图片,但貌似就是颜色有偏差
部分函数如下:
while(1) {
/* Wait to get the full frame buffer to show. 等待获取完整帧缓冲区以显示 */
while(kStatus_Success != CAMERA_RECEIVER_GetFullBuffer(&cameraReceiver, &cameraReceivedFrameAddr))
{
}
// 自己捣鼓的 把 camera 的 xrgb 数据转换为 rgb565 并进行显示
LCD_DrawBMP_32bit_Convert_16bit ((_DEMO_BUFFER_WIDTH/2) - (_DEMO_CAMERA_WIDTH/2),
(_DEMO_BUFFER_HEIGHT/2) - (_DEMO_CAMERA_HEIGHT/2),
_DEMO_CAMERA_HEIGHT, _DEMO_CAMERA_WIDTH, ( void *)cameraReceivedFrameAddr); // 显示成功 ok
/* Return the camera buffer to camera receiver handle. */
CAMERA_RECEIVER_SubmitEmptyBuffer(&cameraReceiver, (uint32_t)cameraReceivedFrameAddr);
// cameraReceivedFrameAddr 这个地址里面的数据应该就是 xrgb 8888 格式的吧 ??
}
/*
*********************************************************************************************************
* 函 数 名: LCD_DrawBMP_32bit_Convert_16bit
* 功能说明: 在LCD上显示一个 MBP 位图,位图点阵扫描次序:从左到右,从上到下
* 把 32bit argb8888 数据转化为 16bit rgb565 格式
* 形 参:
* _usX, _usY : 图片的坐标
* _usHeight :图片高度
* _usWidth :图片宽度
* _ptr :图片点阵指针, 传进来的是 argb8888 数据,
* 返 回 值: 无
*********************************************************************************************************
*/
void LCD_DrawBMP_32bit_Convert_16bit(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, const void *_ptr)
{
uint16_t rgb565=0;
uint16_t h, x, y;
__IO uint8_t *ptr;
__IO uint16_t(*frameBuffer)[g_LcdWidth] = (void *)s_CurrentFrameBuffer; // lcd 显存地址
if(!_ptr) return;
ptr = (uint8_t *)_ptr;
y = _usY;
for (h = 0; h < _usHeight; h++)
{
for (x = 0; x < _usWidth; x++)
{
ptr ++; // 跳过最高 8位不用
rgb565 = (uint16_t)((ptr[2]>>3)<<11)+(uint16_t)((ptr[1]>>2)<<5)+(uint16_t)(ptr[0]>>3); // 把 rgb888 转化为 rgb565
frameBuffer[y][_usX + x] = rgb565; // 开始显示
ptr += 3;
}
y ++;
}
}
大佬帮忙看看是哪里转换的不对 ??
|
|