# include“l_bitmap.h”
L_LTCLR_APIL_INTL_ConvertCLUTToBuffer(pData, pIccCLUT, nPrecision, znDataSize)
类中的信息ICC_CLUT8或ICC_CLUT16结构放入顺序数据的一个缓冲区中。
指向要用转换后的信息作为一个连续字节缓冲区进行更新的缓冲区的指针。
指向ICC_CLUT8或ICC_CLUT16结构,该结构包含要转换为顺序数据缓冲区的信息。
值,该值表示pIccCLUT参数的pData成员所指向的数据的每个元素的字节数。可能取值为:
价值 | 意义 |
---|---|
1 | 如果pIccCLUT参数的类型为ICC_CLUT8结构,则使用。 |
2 | 如果pIccCLUT参数的类型为ICC_CLUT16结构,则使用。 |
pIccCLUT指向的用于版本控制的结构的字节大小。使用sizeof(ICC_CLUT8)或sizeof(ICC_CLUT16)。
价值 | 意义 |
---|---|
成功 | 活动很成功。 |
< 1 | 发生错误。指返回代码. |
pData指针必须由用户分配。它的大小必须等于pIccCLUT参数指向的结构的大小(以字节为单位)。
pData缓冲区大小的计算方法如下:16 + 1 + 3 + znDataSize。有关如何计算znDataSize的更多信息,请参阅ICC.1:2004-10规范第48页或第51页(https://www.color.org/index.xalter)的网站。
必需的dll和库
x64 Win32。
下面的示例填充ICC_CLUT16结构,然后将其转换为缓冲区。
L_UCHAR* ConvertCLUTToBufferExample(L_INT* pnRet)
{
L_UCHAR * dstBuffer;
ICC_CLUT16 iccCLUT16;
L_INT nCntr;
L_SSIZE_T nDataSize;
memset (&iccCLUT16 0运算符(ICC_CLUT16));
//精度为2,因为我们使用的是ICC_CLUT16
//和2表示2字节(即在
// pData指针大小为2字节
iccCLUT16。uPrecision = 2;
//网格点数组的个数
//输入通道的数量,让我们假设
//通道数为2
iccCLUT16。NumOfGridPoints[0] = 0;
iccCLUT16。NumOfGridPoints[1] = 1;
//数据缓冲区的大小是
//所有在NumOfGridPoints数组中的数据乘以
//输出通道数乘以精度
nDataSize = 1;
为(nCntr = 0;nCntr < 2;nCntr + +)
nDataSize = iccCLUT16.NumOfGridPoints[nCntr];
//假设我们有3个输出通道
nDataSize *= 3 * iccCLUT16.uPrecision;
//分配数据指针
iccCLUT16。pData = (L_IccUInt16Number*) calloc (nDataSize,运算符(L_IccUInt16Number));
如果(iccCLUT16。pData == NULL)
{
*pnRet = ERROR_NO_MEMORY;
返回零;
}
//然后用需要的信息填充它,在这个例子中,我只会清除它
memset (iccCLUT16。pData, 0, nDataSize);
//然后为NumOfGridPoints和Precision和Pad字节添加字节计数
nDataSize += 16 + 1 + 3;
//现在分配区分缓冲区
dstBuffer = (L_UCHAR*) calloc(nDataSize,)运算符(L_UCHAR));
如果(dstBuffer == NULL)
{
*pnRet = ERROR_NO_MEMORY;
返回零;
}
//之后调用转换函数
*pnRet = L_ConvertCLUTToBuffer (dstBuffer, (L_VOID *) &iccCLUT16, iccCLUT16。uPrecision nDataSize);
如果(*pnRet != SUCCESS)
返回零;
返回dstBuffer;
}