L_ColorResBitmap

# include“l_bitmap.h”

L_LTKRN_APIL_INTL_ColorResBitmap(pBitmapSrc, pBitmapDst, uStructSize, nBitsPerPixel, uFlags, palalette, hPalette, uColors, pfnCallback, pUserData)

将位图从任何每像素位转换为任何每像素位。此函数提供了指定输出目的地和指定要使用的选项板的灵活性。

参数

pBITMAPHANDLEpBitmapSrc

指向引用源位图句柄的指针。通过指定与目标相同的位图,可以就地转换位图。

pBITMAPHANDLEpBitmapDst

指向指向目标位图的位图句柄的指针。以下是有效值:

价值 意义
一样pBitmapSrc 就地转换位图。
新pBITMAPHANDLE 创建一个新的位图来包含转换后的数据。源位图保持不变。
依赖回调函数来指导输出。源位图保持不变。

L_UINTuStructSize

用于版本控制的pBitmap所指向的结构的字节大小。使用sizeof (BITMAPHANDLE)。

L_INTnBitsPerPixel

每像素增加或减少位图的位数。取值范围为1、2、3、4、5、6、7、8、12、16、24、32、48、64。

L_UINTuFlags

处理选项。注意,调色板和抖动选项仅在结果位图需要调色板时才有用(当它是每像素8位或更少时)。您可以在适当的时候使用按位OR(|)组合值。以下是有效值:

价值 意义
CRF_FIXEDPALETTE [0x01]使用固定调色板
CRF_OPTIMIZEDPALETTE [0x02]创建一个优化的调色板,或者如果您在pPalettehPalette参数,而不是同时为调色板中的指定项提供优化的颜色。
CRF_NETSCAPEPALETTE [0x40]使用Netscape Navigator和Microsoft Internet Explorer使用的固定调色板。
CRF_USERPALETTE [0x10]使用palette参数中指定的调色板,不提供优化的颜色。请注意,CRF_USERHPALETTE不能Or-ed。
CRF_USERHPALETTE [0x0100]使用hPalette参数中指定的调色板,不提供优化的颜色。请注意,不能使用CRF_USERPALETTE进行Or-ed。
CRF_IDENTITYPALETTE [0x08]插入Windows系统面板
CRF_FASTMATCHPALETTE [0x20]使用预定义的表来使用自己的调色板加速转换指L_CreateUserMatchTable
CRF_BYTEORDERBGR [0x04]使用BGR颜色顺序。该标志仅在每像素为16位或更高时才有意义。
CRF_BYTEORDERRGB [0x00]使用RGB颜色。该标志仅在每像素为16位或更高时才有意义。
CRF_BYTEORDERGRAY (0 x80)灰度。目标位图应该是12、16或32位灰度。12、16和32位灰度图像仅支持文件和医疗成像工具包。
CRF_SLOWMATCH [0x0200]与CRF_OPTIMIZEDPALETTE标志一起使用可以使用较慢但更准确的匹配过程。
CRF_FAVORPURECOLORS [0x0400]在优化的调色板中给出自己的图像调色板条目中经常出现的颜色
CRF_NODITHERING [0x00000000]使用最接近的颜色匹配。
CRF_FLOYDSTEINDITHERING [0x00010000]使用弗洛伊德-斯坦伯格抖动
CRF_STUCKIDITHERING [0x00020000]使用Stucki抖动
CRF_BURKESDITHERING [0x00030000]使用Burkes抖动
CRF_SIERRADITHERING [0x00040000]使用Sierra抖动
CRF_STEVENSONARCEDITHERING [0x00050000]使用Stevenson Arce抖动
CRF_JARVISDITHERING [0x00060000]使用Jarvis抖动
CRF_ORDEREDDITHERING [0x00070000]使用有序抖动,它比其他抖动方法更快,但精度较低。
CRF_CLUSTEREDDITHERING [0x00080000]使用群集抖动。
CRF_BYTEORDERROMM [0x0800]使用ROMM颜色这个标志只有在每像素为24或48位时才有意义。
CRF_ALPHAINIT [0x01000000]将(32或64位彩色图像)的alpha通道初始化为所有通道(8位alpha通道为0xFF, 16位alpha通道为0xFFFF)。如果没有这个标志,创建的alpha通道将初始化为0。
CRF_BYTEORDERRGB565 [0x00004000] RGB 565字节顺序。

L_RGBQUAD* pPalette

要使用的自定义面板。参数说明如下:

如果您想使用固定的调色板或完全优化的调色板,则在此参数中传递NULLhPalette.方法中指定CRF_USERPALETTE,则可以提供整个面板uFlags参数并传递调色板的地址。有关如何填充调色板的更多信息,请参阅LPRGBQUAD调色板(带有CRF_USERPALETTE).如果你想让函数用优化的颜色填充你的调色板的一部分,在uFlags参数中指定CRF_OPTIMIZEDPALETTE,并在palette中传递你的调色板的地址,在hPalette中传递NULL。有关如何填充调色板的更多信息,请参阅LPRGBQUAD调色板(带有CRF_OPTIMIZEDPALETTE)

L_HPALETTEhPalette

要使用的自定义面板。参数说明如下:

如果您想使用固定的调色板或完全优化的调色板,则在此参数中传递NULLpPalette

如果你想提供整个调色板,在uFlags参数中指定CRF_USERHPALETTE并传递调色板的句柄。有关如何填充调色板的更多信息,请参阅LPRGBQUAD调色板(带有CRF_USERPALETTE).如果你想让这个函数用优化的颜色填充你的调色板的一部分,在uFlags参数中指定CRF_OPTIMIZEDPALETTE,并在hPalette中为调色板和你的调色板的句柄传递NULL。有关如何填充调色板的更多信息,请参阅LPRGBQUAD调色板(带有CRF_OPTIMIZEDPALETTE)

L_UINTuColors

调色板中颜色的数量。传递0以获得默认值(例如256表示每像素8位)。否则,做以下其中一项:

如果您在面板或hPalette参数,则在选项板中传递条目数(包括保留条目)。属性中指定NULLpPalette和hPalette参数中指定CRF_OPTIMIZEDPALETTEuFlags参数时,可以使用此参数限制函数在优化的调色板中映射的颜色数量。

COLORRESCALLBACKpfnCallback

用于额外处理的可选回调函数。(无论是否提供回调函数,位图都会以同样的方式修改。)

如果不提供回调函数,则该参数的值为NULL。如果提供回调函数,则使用函数指针作为此参数的值。L_ColorResBitmap在内部循环中一次处理几行。它在循环中调用这个回调函数。回调函数必须遵循中描述的函数语法COLORRESCALLBACK函数

L_VOID* pUserData

可用于传递回调函数所需的一个或多个附加参数的空指针。

要使用此特性,请为变量赋值或创建包含所需字段的结构。然后,在这个参数中,传递变量或结构的地址,将其强制转换为L_VOID*。回调函数在自己的pUserData形参中接收地址,可以将其转换为适当数据类型的指针以访问变量或结构。

如果不需要附加参数,则可以在此参数中传递NULL。

返回

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

评论

此函数不支持签名数据映像。如果将签名数据图像传递给该函数,则返回错误代码ERROR_SIGNED_DATA_NOT_SUPPORTED。

有关抖动的一般信息,请参阅颜色分辨率和抖动

在指定输出目的地时,您可以就地转换位图,创建一个新的转换后的位图,或者让回调函数处理输出。

在指定选项板时,可以使用简单的选项板选项,也可以指定适合您需要的选项板。定制的调色板可以是您指定的任何大小。它可以包括特定的颜色、保留的空白项,以及该函数用优化的颜色填充的打开项。

如中所述,如果多次使用相同的定制调色板,则可以通过创建表来提高性能L_CreateUserMatchTable

请注意:使用此函数更改24位或32位图像的颜色顺序(即RGB到BGR)在绘制或保存(到文件)时对图像没有影响。如果要更改视觉外观,可以简单地交换订单委员会成员BITMAPHANDLE

这个函数支持从图像中剥离alpha通道。

必需的dll和库

平台

Win32, x64, Linux。

另请参阅

功能

主题

例子

要获得完整的示例代码,请参阅COLOR
的例子。
这个例子使用了带有回调函数的L_ColorResBitmap
在处理更改后的图像时绘制图像。参考COLORRESCALLBACK
函数查看回调函数如何绘制图像数据。

/*使用的结构回调函数的用户数据*/类型定义结构体tagIMAGECBPARMHWND HWND;/*当前窗口*/HDC HDC;/*设备上下文当前窗口*/L_INT nRow;/*第一行输入缓冲区*/HPALETTE hpalPaint;/*调色板手柄*/矩形rLeadDest;/*目标矩形绘画* /矩形rLeadSource;/*源矩形绘画* /} imagecbparm, * lpimagecbparm;/ *原型COLORRESCALLBACK函数*/L_INT EXT_CALLBACK ColorResCallback (pBITMAPHANDLE pBitmap,L_UCHAR *pBuffer,L_VOID * pColorResUserData;L_INT ColorResBitmapExample(HWND HWNDHINSTANCE hInst, /*应用程序的当前实例,由InitInstance函数设置*存放已加载图像的位图句柄*/,HPALETTE hpalPaint, /*油漆面板句柄*/矩形*rLeadDest, /*目标矩形绘画* /矩形*rLeadSource /*源矩形绘画* /)L_INT nRet;IMAGECBPARM用户数据;/*使用的结构回调函数的用户数据*/用户数据。hpalPaint = hpalPaint;用户数据。rLeadDest = *rLeadDest;用户数据。rLeadSource = *rLeadSource;UNREFERENCED_PARAMETER (hInst);/*设置使用的用户数据回调L_ColorResBitmap函数*/用户数据。hwnd = hwnd;/*当前窗口*/用户数据。hdc = GetDC(hWnd);/*设备上下文当前窗口*/用户数据。nRow = 0;/*第一行缓冲回调函数*//*改变颜色分辨率为每像素4位使用优化的调色板和使用回调函数,在处理图像时绘制图像*//*设置回调函数*/ . L_ColorResBitmap函数nRet = L_ColorResBitmap(LeadBitmap,LeadBitmap,运算符(BITMAPHANDLE) 4CRF_FLOYDSTEINDITHERING | CRF_OPTIMIZEDPALETTE,NULL, NULL, 0, ColorResCallback, &UserData);如果(nRet != SUCCESS)返回nRet;/*避免不必要的重绘*/ValidateRect (hWnd, rLeadDest);返回成功;

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