# include“l_bitmap.h”
L_LTKRN_APIL_INTL_ConvertBufferExt(pBuffer, nWidth, nBitsPerPixelSrc, nBitsPerPixelDst, nOrderSrc, nOrderDst, pPaletteSrc, pPaletteDst, uFlags, uLowBit, uHighBit)
将指定缓冲区中的数据转换为每个像素的指定位和颜色顺序。您可以将每像素的任何位转换为每像素的任何位。
指向输入缓冲区的指针。
图像宽度,以像素为单位。
每像素输入位。取值为:1、2、3、4、5、6、7、8、16、24、32、48、64。
每像素输出位。8位灰度使用0。
输入颜色顺序。可能取值为:
| 价值 | 意义 |
|---|---|
| ORDER_RGB | [0]输入颜色为红绿蓝。 |
| ORDER_BGR | [1]输入颜色为蓝绿红。 |
| ORDER_GRAY | [2]输入为灰度。 |
| ORDER_ROMM | [5]输入颜色按ROMM顺序排列。ROMM仅支持24位和48位映像。 |
| 0 | 数据为每像素8位或更少。 |
输出颜色顺序。可能取值为:
| 价值 | 意义 |
|---|---|
| ORDER_RGB | [0]输出颜色为红绿蓝。 |
| ORDER_BGR | [1]输出颜色为蓝绿红。 |
| ORDER_GRAY | [2]输出为灰度。 |
| ORDER_ROMM | [5]输出颜色按ROMM顺序排列。ROMM仅支持24位和48位映像。 |
| 0 | 数据为每像素8位或更少。 |
指向转换前现有数据的选项板的指针。如果数据是从每像素16位或24位转换而来,则使用NULL表示没有调色板。
指向转换后数据的面板的指针。如果数据转换为每像素颜色16或24位,则使用NULL表示没有调色板。
指示将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]在转换过程中将图像数据视为签名数据。 |
值,该值指示源缓冲区中的低位(如果源缓冲区包含灰度数据)。
值,如果源缓冲区包含灰度数据,则该值指示源缓冲区中的高位。
| 价值 | 意义 |
|---|---|
| 成功 | 活动很成功。 |
| < 1 | 发生错误。指返回代码. |
注意:此函数也适用于12、16和32位灰度图像,但仅适用于文件和医疗成像工具包。如果您试图对12、16或32位灰度图像使用此功能,但没有医学成像版本,则会收到错误。
转换只使用一个缓冲区,该缓冲区必须足够大,以保存转换前后的数据。
每像素8位或更少的图像数据必须使用调色板,该函数可以使用输入、输出或两者都使用的数据。因此,您可能需要为输入指定调色板,或者为输出指定调色板,或者两者都指定。
如果任何一nBitsPerPixelSrc或nBitsPerPixelDst是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 ConvertBufferExtExample{L_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);返回成功;}
帮助收藏
光栅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点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。
