L_SetBitmapAlpha

# include“l_bitmap.h”

L_LTKRN_APIL_INTL_SetBitmapAlpha (pBitmap pAlpha)

替换现有alpha通道数据或在目标位图中创建新的alpha通道数据。

参数

pBITMAPHANDLEpBitmap

指向目标位图句柄,该句柄引用alpha通道数据将被更新或添加的位图。

pBITMAPHANDLEpAlpha

指向源位图句柄,该句柄引用用于创建或替换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);返回成功;

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