L_ConvertBufferExt

# include“l_bitmap.h”

L_LTKRN_APIL_INTL_ConvertBufferExt(pBuffer, nWidth, nBitsPerPixelSrc, nBitsPerPixelDst, nOrderSrc, nOrderDst, pPaletteSrc, pPaletteDst, uFlags, uLowBit, uHighBit)

将指定缓冲区中的数据转换为每个像素的指定位和颜色顺序。您可以将每像素的任何位转换为每像素的任何位。

参数

L_UCHAR* pbuf

指向输入缓冲区的指针。

L_INTnWidth

图像宽度,以像素为单位。

L_INTnBitsPerPixelSrc

每像素输入位。取值为:1、2、3、4、5、6、7、8、16、24、32、48、64。

L_INTnBitsPerPixelDst

每像素输出位。8位灰度使用0。

L_INTnOrderSrc

输入颜色顺序。可能取值为:

价值 意义
ORDER_RGB [0]输入颜色为红绿蓝。
ORDER_BGR [1]输入颜色为蓝绿红。
ORDER_GRAY [2]输入为灰度。
ORDER_ROMM [5]输入颜色按ROMM顺序排列。ROMM仅支持24位和48位映像。
0 数据为每像素8位或更少。

L_INTnOrderDst

输出颜色顺序。可能取值为:

价值 意义
ORDER_RGB [0]输出颜色为红绿蓝。
ORDER_BGR [1]输出颜色为蓝绿红。
ORDER_GRAY [2]输出为灰度。
ORDER_ROMM [5]输出颜色按ROMM顺序排列。ROMM仅支持24位和48位映像。
0 数据为每像素8位或更少。

L_RGBQUAD* pPaletteSrc

指向转换前现有数据的选项板的指针。如果数据是从每像素16位或24位转换而来,则使用NULL表示没有调色板。

L_RGBQUAD* pPaletteDst

指向转换后数据的面板的指针。如果数据转换为每像素颜色16或24位,则使用NULL表示没有调色板。

L_UINTuFlags

指示将16位数据处理为灰度还是彩色的标志。可能取值为:

价值 意义
CVT_SRCGRAY [0x0001]源缓冲区有灰度数据。
CVT_DSTGRAY [0x0002]目标缓冲区有灰度数据。
CVT_SRCUSEBITS [0 x0004]uLowBit而且uHighBit应用到源位图。
CVT_SRCDSTBITS [0x0004] uLowBit和uHighBit应用于目标位图。
CVT_DSTUSEBITS [0x0008] uLowBit和uHighBit应用于目标位图。
CVT_USEALPHA [0x0010]使用alpha通道数据(如果存在)。
CVT_ALPHAINIT [0x0020]初始化alpha通道(32位或64位彩色图像)为所有通道(8位alpha通道为0xFF, 16位alpha通道为0xFFFF)如果没有这个标志,创建的alpha通道将初始化为0。
CVT_SIGNED [0x0100]在转换过程中将图像数据视为签名数据。

L_INTuLowBit

值,该值指示源缓冲区中的低位(如果源缓冲区包含灰度数据)。

L_INTuHighBit

值,如果源缓冲区包含灰度数据,则该值指示源缓冲区中的高位。

返回

价值 意义
成功 活动很成功。
< 1 发生错误。指返回代码

评论

注意:此函数也适用于12、16和32位灰度图像,但仅适用于文件和医疗成像工具包。如果您试图对12、16或32位灰度图像使用此功能,但没有医学成像版本,则会收到错误。

转换只使用一个缓冲区,该缓冲区必须足够大,以保存转换前后的数据。

每像素8位或更少的图像数据必须使用调色板,该函数可以使用输入、输出或两者都使用的数据。因此,您可能需要为输入指定调色板,或者为输出指定调色板,或者两者都指定。

如果任何一nBitsPerPixelSrcnBitsPerPixelDst是16还是32,uFlags用于确定应将数据处理为彩色还是灰度。

如果nBitsPerPixelSrc为12,则假定它是灰度的。但是,为了将来的兼容性,uFlags参数也应该反映它是灰度的。

如果源是灰度(32位除外),pPaletteSrc可以设置为调色板。面板应该包含N个条目。如果源使用uLowBit而且uHighBit,则N = 2取(uHighBit - uLowBit + 1)的幂,否则,N = 2取nBitsPerPixelSrc的幂。注意,如果源是32位灰度,则pPaletteSrc参数的值将被忽略

uFlags取代nOrderSrc而且nOrderDst.如果您为nOrderSrc指定ORDER_BGR,但在中使用CVT_SRCGRAYuFlags时,将假定源缓冲区包含灰度数据。

必需的dll和库

平台

Win32, x64, Linux。

另请参阅

功能

主题

例子

这个例子以每像素24位的速度加载一个临时位图,创建
一个新的16位灰度图像,并使用L_ConvertBuffer来转换数据
从临时位图到新位图。

L_INT ConvertBufferExtExampleL_INT nRet;BITMAPHANDLE LeadBitmap;/*位图句柄最终图像*/BITMAPHANDLE TmpBitmap;/*保存输入图像的位图句柄*/L_UCHAR * pBuf;/*保存行的缓冲区*/HGLOBAL hBuf;/*缓冲区的句柄*/L_INT我;/*循环计数器*//*加载位图,每像素24位*/nRet = L_LoadBitmap (MAKE_IMAGE_PATH(TEXT(“ImageProcessingDemo \ \ Image3.cmp”&TmpBitmap)),运算符(bitmaphandle), 24, 0, null, null);如果(nRet != SUCCESS)返回nRet;/*创建16位灰度位图*/nRet = L_CreateBitmap(&LeadBitmap,运算符(BITMAPHANDLE), TYPE_CONV, TmpBitmap。宽度,TmpBitmap。高度,16, ORDER_GRAY, NULL, TmpBitmap。ViewPerspective, NULL, 0);如果(nRet != SUCCESS)返回nRet;/*分配并锁定缓冲区*/hBuf = GlobalAlloc(GMEM_MOVEABLE,max(LeadBitmap。BytesPerLine TmpBitmap.BytesPerLine));pBuf = (L_UCHAR*)GlobalLock(hBuf);/ *过程每一个从TmpBitmap到LeadBitmap */L_AccessBitmap (&LeadBitmap);L_AccessBitmap (&TmpBitmap);(i = 0;i < TmpBitmap.Height;我+ +)nRet =(L_INT) L_GetBitmapRow(&TmpBitmap, pBuf, i, TmpBitmap.BytesPerLine);如果(nRet < 1)返回nRet;nRet = L_ConvertBufferExt(pBuf, TmpBitmap。宽度,TmpBitmap。BitsPerPixel LeadBitmap。BitsPerPixel,TmpBitmap。秩序,LeadBitmap。Order, NULL, NULL,Cvt_dstgray, 0, 15);如果(nRet != SUCCESS)返回nRet;nRet = (L_INT)L_PutBitmapRow(&LeadBitmap, pBuf, i, LeadBitmap.BytesPerLine);如果(nRet < 1)返回nRet;L_ReleaseBitmap (&LeadBitmap);L_ReleaseBitmap (&TmpBitmap);/ /我们不再需要的内存GlobalUnlock (hBuf);GlobalFree (hBuf);L_SaveBitmap(MAKE_IMAGE_PATH(TEXT)“Result.BMP”)), &LeadBitmap, FILE_BMP, 24, 0, NULL);如果(nRet != SUCCESS)返回nRet;/*释放临时位图*/如果(TmpBitmap.Flags.Allocated)L_FreeBitmap (&TmpBitmap);如果(LeadBitmap.Flags.Allocated)L_FreeBitmap (&LeadBitmap);/*强制创建调色板*/SendMessage (hWnd, WM_QUERYNEWPALETTE, 0, 0L);返回成功;

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