/** * @brief Convert RGB16 image to RGB24. * @param pDestBuffer: buffer hold the data in RGB24 format * @param pSrcBuffer: buffer hold the data in RGB16 format * @param is_bgr: 1 if bgr coding is used, 1 if rgb (inverted) * @retval None */ static void RGB16toRGB24(uint8_t *pDestBuffer, uint8_t *pSrcBuffer, uint8_t is_bgr) { uint16_t *pSrc; uint8_t *pDest; uint32_t i = 0, j = 0; uint16_t value; pSrc = (uint16_t*) & pSrcBuffer[IMAGE_BUFFER_SIZE] - 1 ; pDest = (uint8_t*) & pDestBuffer[MAX_IMAGE_SIZE]; for (i = IMAGE_COLUMN_SIZE; i > 0; i-- ) { pDest -= (3 * IMAGE_LINE_SIZE); for (j = 2 * IMAGE_LINE_SIZE; j > 0; j -= 2 ) { value = (uint16_t) * pSrc; if( is_bgr) { *pDest++ = BMP_PIXEL16_TO_B(value); *pDest++ = BMP_PIXEL16_TO_G(value); *pDest++ = BMP_PIXEL16_TO_R(value); } else { *pDest++ = BMP_PIXEL16_TO_R(value); *pDest++ = BMP_PIXEL16_TO_G(value); *pDest++ = BMP_PIXEL16_TO_B(value); } pSrc--; } pDest -= (3 * IMAGE_LINE_SIZE ); } }
/** * @brief Convert RGB16 image to RGB24. * @param pDestBuffer: buffer hold the data in RGB24 format * @param pSrcBuffer: buffer hold the data in RGB16 format * @retval None */ static void RGB16toRGB24(uint8_t *pDestBuffer, uint8_t *pSrcBuffer) { uint16_t *pSrc; uint8_t *pDest; uint32_t i = 0, j = 0; uint16_t value; pSrc = (uint16_t*) & pSrcBuffer[IMAGE_BUFFER_SIZE] - 1; pDest = (uint8_t*) & pDestBuffer[0]; for (i = IMAGE_COLUMN_SIZE; i > 0; i-- ) { for ( j = 0; j < 2 * IMAGE_LINE_SIZE; j += 2 ) { value = (uint16_t) * pSrc; *pDest++ = BMP_PIXEL16_TO_R(value); *pDest++ = BMP_PIXEL16_TO_G(value); *pDest++ = BMP_PIXEL16_TO_B(value); pSrc--; } } }