社区
图形处理/算法
帖子详情
24位和32位图标的透明显示
sinux_1983
2009-03-24 09:08:19
正在做一个图标编辑的工具。
现在4位和8位的图标已经能够正常显示(有透明效果)。
但是24位和32位的确不能正常显示。
求教24位和32位带有alpha通道的位图显示和编辑思路。
如果用CreateSection的方式生成DIB句柄,选人DC并用BitBlt传输到屏幕上为什么没有透明效果?
...全文
225
1
打赏
收藏
24位和32位图标的透明显示
正在做一个图标编辑的工具。 现在4位和8位的图标已经能够正常显示(有透明效果)。 但是24位和32位的确不能正常显示。 求教24位和32位带有alpha通道的位图显示和编辑思路。 如果用CreateSection的方式生成DIB句柄,选人DC并用BitBlt传输到屏幕上为什么没有透明效果?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huangminnei
2009-03-25
打赏
举报
回复
void inline TransparentBlt2( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
UINT crTransparent // 透明色,COLORREF类型
)
{
HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图
HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
HDC hImageDC = CreateCompatibleDC(hdcDest);
HDC hMaskDC = CreateCompatibleDC(hdcDest);
hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);
// 将源DC中的位图拷贝到临时DC中
if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
else
StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);
// 设置透明色
SetBkColor(hImageDC, crTransparent);
// 生成透明区域为白色,其它区域为黑色的掩码位图
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);
// 生成透明区域为黑色,其它区域保持不变的位图
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// 透明部分保持屏幕不变,其它部分变成黑色
SetBkColor(hdcDest,RGB(255,255,255));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// "或"运算,生成最终效果
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
// 清理、恢复
SelectObject(hImageDC, hOldImageBMP);
DeleteDC(hImageDC);
SelectObject(hMaskDC, hOldMaskBMP);
DeleteDC(hMaskDC);
DeleteObject(hImageBMP);
DeleteObject(hMaskBMP);
}
VC实现半
透明
显示
拖动
图标
MFC实现的拖动时
图标
变成半
透明
的副本,仿照Win7拖动
图标
时的样式。代码简单,但愿能起到抛砖引玉的作用。
VB6 窗体标题栏
显示
透明
通道
图标
采用API函数实现窗体标题栏
显示
透明
通道的
图标
chrome
图标
还原
透明
工具
在win10系统下,新版chrome更新后
图标
会呈现白色的底色,在开始菜单里中比较刺眼,这个工具可以还原底色为
透明
色,即
图标
背景和原来一样会随着系统主体色变化。
C#自动缩放半
透明
图标
控件
为应用程序使用的
图标
,而非按钮,也许有可能需要添加一些迷人的效果,而不是只
显示
有上升的
图标
(悬停时) 。这种控件给您一个有趣的可视效果,这使得一个
图标
缩放当鼠标停放在上面它。此外,有一个模糊的属性,将导致该
图标
变成
透明
的(没有一个单一的代码行! ) ;当然,你可以将其关闭。
大量漂亮的ICO
图标
集
【ico】是Icon file的缩写,是Windows的
图标
文件格式的一种,可以存储单个图案、多尺寸、多色板的
图标
文件。
图标
是具有明确指代含义的计算机图形。其中桌面
图标
是软件标识,界面中的
图标
是功能标识。
图标
有一套标准的大小和属性格式,且通常是小尺寸的。每个
图标
都含有多张相同
显示
内容的图片,每一张图片具有不同的尺寸和发色数。一个
图标
就是一套相似的图片,每一张图片有不同的格式。从这一点上说
图标
是三维的。
图标
还有另一个特性:它含有
透明
区域,在
透明
区域内可以透出
图标
下的桌面背景。在结构上
图标
其实和麦当劳的巨无霸汉堡差不多。 一个
图标
实际上是多张不同格式的图片的集合体,并且还包含了一定的
透明
区域。因为计算机操作系统和
显示
设备的多样性,导致了
图标
的大小需要有多种格式。 操作系统在
显示
一个
图标
时,会按照一定的标准选择
图标
中最适合当前
显示
环境和状态的图像。如果你用的是Windows98操作系统,
显示
环境是 800x600分辨率,
32
位
色深,你在桌面上看到的每个
图标
的图像格式就是256色32x32象素大小。如果在相同的
显示
环境下,Windows XP操作系统中,这些
图标
的图像格式就是:真彩色(
32
位
色深)、32x32象素大小。下面就是Windows各个操作系统中的标准
图标
格式:(单
位
:大小象素—颜色)
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章