# include“l_bitmap.h”
L_LTKRN_APIL_INTL_SetBitmapAlpha (pBitmap pAlpha)
替换现有alpha通道数据或在目标位图中创建新的alpha通道数据。
指向目标位图句柄,该句柄引用alpha通道数据将被更新或添加的位图。
指向源位图句柄,该句柄引用用于创建或替换alpha通道数据的位图。
价值 | 意义 |
---|---|
成功 | 活动很成功。 |
< 1 | 发生错误。指返回代码. |
此函数不支持签名数据映像。如果将签名数据图像传递给该函数,则返回错误代码ERROR_SIGNED_DATA_NOT_SUPPORTED。
通常,alpha通道包含用于透明的掩码。这个函数,连同L_GetBitmapAlpha以及LEADTOOLS区域处理功能,让您使用alpha通道实现透明。
只有16位、32位和64位映像可以有alpha通道。如果pBitmap
引用任何其他颜色分辨率的位图,此函数在替换alpha通道之前将pBitmap位图转换为32位。(如果你想要16位,你应该用L_ColorResBitmap,如有必要,在调用此函数之前。)
对于64位位图,pAlpha
在替换alpha通道之前转换为16位灰度。如果pBitmap是48位的,它将被转换为64位,然后将alpha信息添加到其中。
pAlpha位图不一定是灰度的。这个函数将数据从pAlpha位图转换为必要的灰度或1位格式,因为它取代了pBitmap中的alpha通道。(pAlpha位图本身保持不变。)
必需的dll和库
Win32, x64, Linux。
此示例演示如何创建、保存和使用掩码以实现透明度。
我们假设已经创建了窗口,并设置了适合方面的大小
在pszFilename中指定的图像的比例。
L_INT SetBitmapAlphaExample(HWND HWND,L_TCHAR* szFilename)
{
L_INT nRet;
BITMAPHANDLE MainBitmap;/*主位图*/
BITMAPHANDLE AlphaBitmap;/* Alpha通道位图*/
RGNXFORM XFormToBitmap;/ *结构为转换显示坐标*/
HDC hWindowDC;/*当前窗口的设备上下文*/
矩形rClientArea;/*当前窗口的客户端区域*/
矩形rRgnRect;/*定义当前区域的矩形*/
hSavedPalette = NULL;/*当前系统面板的临时副本*/
HPALETTE hOurPalette = NULL;/*我们将用来绘制*/的调色板
/*获取当前窗口的设备上下文
hWindowDC = GetDC (hWnd);
/*获取当前窗口的客户端区域*/
GetClientRect (hWnd, &rClientArea);
/*以每像素16位的速度加载位图*/
nRet = L_LoadBitmap(szFilename, &MainBitmap,运算符(bitmaphandle), 16, order_bgr, null, null);
如果(nRet != SUCCESS)
返回nRet;
/*设置XFormToBitmap字段,假设显示矩形相同
作为当前窗口的客户端区域*/
XFormToBitmap。uViewPerspective = TOP_LEFT;
XFormToBitmap。nXScalarNum = BITMAPWIDTH(&MainBitmap);
XFormToBitmap。nXScalarDen = rClientArea.right;
XFormToBitmap。nYScalarNum = BITMAPHEIGHT(&MainBitmap);
XFormToBitmap。nYScalarDen = rClientArea.bottom;
XFormToBitmap。nXOffset = 0;
XFormToBitmap。nYOffset = 0;
/*指定矩形来定义区域*/
SetRect (&rRgnRect rClientArea。/ 8, rClientArea.bottom / 8,
rClientArea。/ 2, rClientArea.bottom / 2);
/*创建椭圆区域在AlphaBitmap */
nRet = L_SetBitmapRgnEllipse(&MainBitmap, &XFormToBitmap, &rRgnRect, L_RGN_SET);
如果(nRet != SUCCESS)
返回nRet;
/*从区域*/创建掩码位图
nRet = L_CreateMaskFromBitmapRgn (&MainBitmap, &AlphaBitmap,运算符(BITMAPHANDLE));
如果(nRet != SUCCESS)
返回nRet;
/*更新alpha通道在主位图*/
nRet = L_SetBitmapAlpha(&MainBitmap, &AlphaBitmap);
如果(nRet != SUCCESS)
返回nRet;
/*保存位图为每像素16位以保持alpha通道*/
L_SaveBitmap(MAKE_IMAGE_PATH(TEXT)“Result.TIF”)), &MainBitmap, FILE_TIF, 16, 0, NULL);
如果(nRet != SUCCESS)
返回nRet;
/*释放位图*/
L_FreeBitmap (&MainBitmap);
L_FreeBitmap (&AlphaBitmap);
/*加载我们刚刚保存的位图,并获得它的alpha通道*/
nRet = L_LoadBitmap(MAKE_IMAGE_PATH(TEXT(“Result.TIF”&MainBitmap)),运算符(bitmaphandle), 0, order_bgr, null, null);
如果(nRet != SUCCESS)
返回nRet;
nRet = L_GetBitmapAlpha(&MainBitmap, &AlphaBitmap,运算符(BITMAPHANDLE));
如果(nRet != SUCCESS)
返回nRet;
/*使用AlphaBitmap作为掩码来设置区域在主位图*/
nRet = L_SetBitmapRgnFromMask (&MainBitmap, NULL, &AlphaBitmap, L_RGN_SET);
如果(nRet != SUCCESS)
返回nRet;
/*创建用于绘制*/的调色板
hOurPalette = L_CreatePaintPalette(hWindowDC, &MainBitmap);
/*选择我们的调色板并保存旧的*/
hSavedPalette = SelectPalette (hWindowDC, hOurPalette, FALSE);
/*实现调色板*/
RealizePalette (hWindowDC);
/*绘制区域*/
nRet = L_PaintRgnDC(hWindowDC, /*设备上下文*/
&MainBitmap, /*位图句柄*/
NULL, /*默认源矩形*/
NULL, /*默认源剪辑区域*/
&rClientArea, /*目标矩形*/
NULL, /*默认目标剪切矩形*/
SRCCOPY);/* ROP3代码为a普通油漆*/
如果(nRet != SUCCESS)
返回nRet;
/*恢复旧的调色板*/
SelectPalette (hWindowDC, hSavedPalette, FALSE);
如果(hOurPalette)
DeleteObject (hOurPalette);
/*释放设备上下文*/
ReleaseDC (hWnd, hWindowDC);
/*释放AlphaBitmap */
L_FreeBitmap (&AlphaBitmap);
L_FreeBitmap (&MainBitmap);
返回成功;
}
帮助收藏
光栅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点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。