# include“l_bitmap.h”
L_LTKRN_APIL_INTL_GetBitmapYUVData(pBitmap, pYuvData, puYuvDataSize, yuvFormat, uFlags)
将位图的灰度或BGR数据转换为YUV并将其存储在输出缓冲区中。
指向位图句柄的指针,该句柄引用将被转换数据的位图。必须分配位图。位图必须为8位灰度或24位或32位彩色(BGR)。
指向接收YUV数据的缓冲区的指针。如果为NULL, pnYuvDataSize将被更新为YUV数据缓冲区的预期大小。如果不为NULL,如果缓冲区足够大,可以包含YUV数据,则将提取YUV数据并存储在pYuvData中。
所指向的YUV数据缓冲区的所需大小pYuvData
.不能为NULL。当pYuvData为非null时,nYuvDataSize表示pYuvData的大小。如果这个值太小,函数将失败(并显示ERROR_BUFFER_TOO_SMALL错误),pnYuvDataSize将更新为所需的缓冲区大小。
指定YUV数据格式。看到L_YUV.
未使用的,未使用的,未使用的通过0。
价值 | 意义 |
---|---|
成功 | 活动很成功。 |
ERROR_NULL_PTR | pBitmap 或pYuvData 是零。 |
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;
}
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗网络查看器net
188宝金博怎么下载
支持的平台上
.NET、Java、Android和iOS/macOS程序集
C API/ c++类库
HTML5 JavaScript库
您的邮件已发送给技术支持!应该有人联系!如果你的事情很紧急,请回来聊天。
聊天时间:
周一至周五,美国东部时间上午8:30至下午6:00
感谢您的反馈!
请再次填写表格,开始新的聊天。
所有代理目前都离线。
聊天时间:
星期一至星期五
美国东部时间上午8:30 -下午6点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。