# 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点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。