# include“l_bitmap.h”
L_LTKRN_APIL_INTL_ConvertBufferExt2 (pbuf、nWidth nBitsPerPixelSrc、nBitsPerPixelDst nOrderSrc, nOrderDst, pPaletteSrc, pPaletteDst, pPaletteSrc16, pPaletteDst16, uFlags, uLowBit, uHighBit)
将指定的缓冲区中的数据转换为指定的每像素位数和颜色。你可以转换任何比特每像素比特每像素。
指向输入缓冲区的指针。
图像的宽度,以像素为单位。
输入比特每像素。可能的值是1,2,3,4,5,6,7,8,16日,24日,32岁的48和64。
输出比特每像素。使用0 8位灰度。
输入颜色顺序。可能的值是:
价值 | 意义 |
---|---|
ORDER_RGB | [0]输入的颜色是红-绿-蓝顺序。 |
ORDER_BGR | [1]以blue-green-red顺序输入颜色。 |
ORDER_GRAY | [2]输入灰度。 |
ORDER_ROMM | [5]以罗姆顺序输入颜色。罗姆只支持24和48比特位图像。 |
0 | 数据是8位/像素或更少。 |
输出颜色顺序。可能的值是:
价值 | 意义 |
---|---|
ORDER_RGB | [0]输出颜色是红-绿-蓝顺序。 |
ORDER_BGR | [1]以blue-green-red顺序输出颜色。 |
ORDER_GRAY | [2]输出灰度。 |
ORDER_ROMM | [5]的输出颜色罗姆秩序。罗姆只支持24和48比特位图像。 |
0 | 数据是8位/像素或更少。 |
指针指向现有的面板数据,在转换。如果数据被转换从16或每像素24位,使用零没有调色板。
指针转换的面板数据。如果数据被转换为16或每像素24位颜色,使用零没有调色板。
指针的16位附近地区现有的数据,之前转换。如果数据被转换从16或每像素24位,使用零没有调色板。
保留以供将来使用。通过零。
标志指示是否将16位数据灰度或颜色。可能的值是:
价值 | 意义 |
---|---|
CVT_SRCGRAY | [0 x0001]缓冲灰度数据来源。 |
CVT_DSTGRAY | [0 x0002]目的地缓冲区灰度数据。 |
CVT_SRCUSEBITS | [0 x0004]uLowBit 和uHighBit 适用于源位图。 |
CVT_SRCDSTBITS | 0 x0004 uLowBit和uHighBit应用到目标位图。 |
CVT_DSTUSEBITS | [0 x0008] uLowBit和uHighBit应用到目标位图。 |
CVT_USEALPHA | [0 x0010]使用alpha通道数据(如果存在)。 |
CVT_ALPHAINIT | [0 x0020]初始化alpha通道(32或64位彩色图像)所有的(0 xff为16位8位alpha通道和0 xffff阿尔法通道)。如果没有这个标志,创建alpha通道初始化零。 |
CVT_SIGNED | [0 x0100]将图像数据作为数据在转换签署。 |
值指示低比特源缓冲区,如果源缓冲区包含灰度数据。
值指示高在源缓冲区,如果源缓冲区包含灰度数据。
价值 | 意义 |
---|---|
成功 | 函数是成功的。 |
< 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
。如果指定ORDER_BGR nOrderSrc,但使用CVT_SRCGRAY uFlags,它将假定源缓冲区包含灰度数据。
pPaletteSrc16
只有源使用灰度。在这种情况下,如果pPaletteSrc16不是零,它将取代pPaletteSrc参数。所以,如果你通过pPaletteSrc和pPaletteSrc16 pPaletteSrc16将被使用。
必需的dll和库
Win32 x64, Linux。
这个例子中加载一个临时在每像素24位位图,创建一个新的16位灰度图像,利用L_ConvertBufferExt2将临时位图的数据到新的一个。
L_INT ConvertBufferExt2Example (HWND HWND)
{
L_INT nRet;
BITMAPHANDLE LeadBitmap;/ *为最终的图像位图处理* /
BITMAPHANDLE TmpBitmap;/ *位图句柄保存输入的图像* /
L_UCHAR * pBuf;* / / *缓冲的行
HGLOBAL hBuf;/ *处理缓冲区* /
L_INT我;/ * * /循环计数器
/ *加载位图,每像素24位* /
nRet = L_LoadBitmap (MAKE_IMAGE_PATH(文本(“ImageProcessingDemo \ \ Image3.cmp”&TmpBitmap)),运算符0 (BITMAPHANDLE), 24日,空,空);
如果(nRet ! =成功)
返回nRet;
/ *创建一个新的16位灰度位图* /
nRet = L_CreateBitmap (&LeadBitmap,运算符(BITMAPHANDLE) TYPE_CONV TmpBitmap。宽度、TmpBitmap.Height
16日,ORDER_GRAY, NULL, TmpBitmap。ViewPerspective零0);
如果(nRet ! =成功)
返回nRet;
/ *分配和锁定缓冲区* /
hBuf = GlobalAlloc (GMEM_MOVEABLE马克斯(LeadBitmap。BytesPerLine TmpBitmap.BytesPerLine));
pBuf = (L_UCHAR *) GlobalLock (hBuf);
/ *处理每一行从TmpBitmap LeadBitmap * /
L_AccessBitmap (&LeadBitmap);
L_AccessBitmap (&TmpBitmap);
为(i = 0;我< TmpBitmap.Height;我+ +)
{
nRet = (L_INT) L_GetBitmapRow (&TmpBitmap, pBuf TmpBitmap.BytesPerLine);
如果(nRet < 1)
返回nRet;
nRet = L_ConvertBufferExt2 (pBuf TmpBitmap.Width,
TmpBitmap。BitsPerPixel LeadBitmap.BitsPerPixel,
TmpBitmap。秩序,LeadBitmap。秩序,空,空,空,空,
CVT_DSTGRAY 0 15);
如果(nRet ! =成功)
返回nRet;
nRet = (L_INT) L_PutBitmapRow (&LeadBitmap, pBuf LeadBitmap.BytesPerLine);
如果(nRet < 1)
返回nRet;
}
L_ReleaseBitmap (&LeadBitmap);
L_ReleaseBitmap (&TmpBitmap);
/ *空闲内存,我们不再需要* /
GlobalUnlock (hBuf);
GlobalFree (hBuf);
nRet = L_SaveBitmap (MAKE_IMAGE_PATH(文本(“Result.BMP”))、&LeadBitmap FILE_BMP, 24岁,0,NULL);
如果(nRet ! =成功)
返回nRet;
/ *免费临时位图* /
如果(TmpBitmap.Flags.Allocated)
L_FreeBitmap (&TmpBitmap);
如果(LeadBitmap.Flags.Allocated)
L_FreeBitmap (&LeadBitmap);
/ *力油漆调色板创建* /
SendMessage (hWnd, WM_QUERYNEWPALETTE 0 0 l);
返回成功;
}
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗Web查看器net
188宝金博怎么下载
支持的平台上
net, Java, Android和iOS / macOS组件
C / c++类库的API
HTML5 JavaScript库
你的邮件已经发送到支持!有人应该联系!如果你的问题是紧急请回到聊天。
聊天时间:
周一——周五,上午6点等
谢谢你的反馈!
请填写表单重新开始一个新的聊天。
所有代理目前离线。
聊天时间:
周一-周五
早上8:30 - 6点
联系我们请填写这张表格,我们将通过电子邮件联系你。