L_GetBitmapYUVData

# include“l_bitmap.h”

L_LTKRN_APIL_INTL_GetBitmapYUVData(pBitmap, pYuvData, puYuvDataSize, yuvFormat, uFlags)

将位图的灰度或BGR数据转换为YUV并将其存储在输出缓冲区中。

参数

pBITMAPHANDLEpBitmap

指向位图句柄的指针,该句柄引用将被转换数据的位图。必须分配位图。位图必须为8位灰度或24位或32位彩色(BGR)。

L_VOID* pYuvData

指向接收YUV数据的缓冲区的指针。如果为NULL, pnYuvDataSize将被更新为YUV数据缓冲区的预期大小。如果不为NULL,如果缓冲区足够大,可以包含YUV数据,则将提取YUV数据并存储在pYuvData中。

L_SIZE_T* puYuvDataSize

所指向的YUV数据缓冲区的所需大小pYuvData.不能为NULL。当pYuvData为非null时,nYuvDataSize表示pYuvData的大小。如果这个值太小,函数将失败(并显示ERROR_BUFFER_TOO_SMALL错误),pnYuvDataSize将更新为所需的缓冲区大小。

L_YUVyuvFormat

指定YUV数据格式。看到L_YUV

L_UINTuFlags

未使用的,未使用的,未使用的通过0。

返回

价值 意义
成功 活动很成功。
ERROR_NULL_PTR pBitmappYuvData是零。
ERROR_BITPERPIXEL pBitmap不是每像素8位、24位或32位。
ERROR_NO_MEMORY 内存不足。
ERROR_INV_RANGE 无效的位图宽度或高度(通常是因为它们不是2的倍数)。
ERROR_INVALID_YUV_SIZE YUV数据的大小(nYuvDataSize)与pBitmap中的宽度和高度值不匹配。
ERROR_INVALID_YUV_FORMAT 的颜色空间yuvFormat与支持的值之一不匹配。
< 1 发生错误。指返回代码

评论

用户负责分配YUV缓冲区,并在不再需要时释放它。

缓冲区应该足够大,可以存储整个图像的数据。如果缓冲区不够大,无法存储所有请求的数据,则函数将失败(并显示ERROR_BUFFER_TOO_SMALL错误)。

注意,在每种情况下,函数都会忽略ViewPerspective。因此,YUV数据将匹配位图中的视图透视图。换句话说,如果位图的视图透视图为BOTTOM_LEFT,则在YUV缓冲区中检索的YUV数据将被翻转。在大多数情况下,你会希望YUV缓冲区是正确的一面朝上,所以使ViewPerspective为TOP_LEFT。您可以使用L_ChangeBitmapViewPerspective函数使位图具有正确的ViewPerspective。

YUV数据将采用工作室YUV格式,这意味着Y值的范围将在16到235之间,U, V值的范围将在16到240之间。Y值是无符号的,而U, V值偏移0x80。换句话说,U的0x80值对应于U值为0,0x7F值对应于U值为-1。

如果你不知道YUV缓冲区的期望大小,你可以调用函数两次,如下所示:

L_SIZE_T yuvSize;/*调用L_GetBitmapYUVData和pYuvBuffer=NULL来获得大小*/如果(L_GetBitmapYUVData(pBitmap, NULL, &yuvSize, L_YUV_NV21, 0) == SUCCESS)L_VOID *pYuvBuffer = malloc(yuvSize);L_GetBitmapYUVData(pBitmap, pYuvBuffer, &yuvSize, L_YUV_NV21, 0);/*使用pYuvBuffer */免费(pYuvBuffer);/*当不再需要时释放它*/

必需的dll和库

平台

Win32, x64, Linux。

另请参阅

功能

主题

例子

这个函数从nv21格式的文件中加载YUV数据。位图是使用Android设备的摄像头保存的。

GetBitmapYUVDataExample(BITMAPHANDLE *pBitmap)L_INT nRet;处理hFile =创建文件(MAKE_IMAGE_PATH(TEXT)“nv21.bin”)), generic_read, file_share_read, null, open_existing, file_attribute_normal, null);如果(hFile == INVALID_HANDLE_VALUE)返回ERROR_FILE_OPEN;LARGE_INTEGER文件大小;如果(!GetFileSizeEx (hFile,文件大小)CloseHandle (hFile);返回ERROR_FILE_READ;L_UCHAR* pYuvData = (L_UCHAR*)malloc((size_t)文件大小。QuadPart * 2);如果(pYuvData !)CloseHandle (hFile);返回ERROR_NO_MEMORY;DWORD dwRead;如果(!ReadFile(hFile, pYuvData, (DWORD)文件大小。QuadPart, & dread, NULL))CloseHandle (hFile);免费(pYuvData);返回ERROR_FILE_READ;CloseHandle (hFile);L_FreeBitmap (pBitmap);L_InitBitmap (pBitmap运算符(bitmaphandle), 1920, 1080,24);pBitmap->ViewPerspective = TOP_LEFT;L_SIZE_T yuvDataSize = (L_SIZE_T)fileSize.QuadPart;nRet = L_SetBitmapYUVData(pBitmap, pYuvData, yuvDataSize, L_YUV_NV21, 0);如果(nRet == SUCCESS)(MAKE_IMAGE_PATH(TEXT))“nv21 - 0. jpg”)), pBitmap, FILE_JPEG, 0,2,0, NULL, NULL, NULL);如果(nRet == SUCCESS)yuvDataSize += yuvDataSize;nRet = L_GetBitmapYUVData(pBitmap, pYuvData, &yuvDataSize, L_YUV_YUY2, 0);如果(nRet == SUCCESS)nRet = L_SetBitmapYUVData(pBitmap, pYuvData, yuvDataSize, L_YUV_YUY2, 0);如果(nRet == SUCCESS)(MAKE_IMAGE_PATH(TEXT))“nv21 - 1. jpg”)), pBitmap, FILE_JPEG, 0,2,0, NULL, NULL, NULL);免费(pYuvData);返回nRet;

栅格成像C API帮助
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。