注册 登录
编程论坛 VFP论坛

提取了几个Win11图标,转换为透明png,放到命令按钮中如何做到透明效果呢?

cssnet 发布于 2022-10-15 09:14, 3361 次点击
印象中很久很久以前钻研过透明png格式(即退底,不带白底),具体细节却忘了。唉。
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
19 回复
#2
csyx2022-10-15 09:49
唉,你这不算老foxer吧,png要透明必须先加载到image中
#3
csyx2022-10-15 09:58
这样就透明
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-10-15 10:02编辑过]

#4
cssnet2022-10-15 10:08
以下是引用csyx在2022-10-15 09:49:25的发言:
唉,你这不算老foxer吧,png要透明必须先加载到image中


非常感谢csyx指点!
唉,以前用VFP6时养成的坏习惯:
命令按钮添加图片,若要退底,用的是古老方法:
存一个BMP + 一个MSK,图片退底狠是有些麻烦。
呵呵呵呵。
#5
csyx2022-10-15 10:17
帮助里说的很明白
只有本站会员才能查看附件,请 登录

对于高分辨率透明GIF图像,仅图像控件支持图像的透明度。由于Visual FoxPro仅存储该图像的一个实例作为内部使用的资源,因此可以在另一个控件(如CommandButton)上使用该图像并保持其透明度。为此,首先需要将图像加载到image控件中,并保持该控件(可能是隐藏的)。图像控件将图像加载为资源后,CommandButton即可使用该图像。

vfp6的时候vfp还没用上gdiplus,更不用说处理带alpha通道的 png, ico

[此贴子已经被作者于2022-10-15 10:26编辑过]

#6
sostemp2022-10-15 11:12
偷个懒,能否把win10与11的图分享出来😆
#7
cssnet2022-10-15 11:20
以下是引用sostemp在2022-10-15 11:12:27的发言:

偷个懒,能否把win10与11的图分享出来😆


附件是Win11的Shell32内的图标。
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#8
csyx2022-10-15 12:03
感谢分享,ImageRes 里也应该有很多

[此贴子已经被作者于2022-10-15 12:06编辑过]

#9
cssnet2022-10-15 12:12
以下是引用csyx在2022-10-15 12:03:32的发言:

感谢分享,ImageRes 里也应该有很多


ImageRes好像也差不多,300多个图标,没细看:
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#10
csyx2022-10-15 12:26
看上去 imageres 里都是全新设计的, shell32 中很大部分是老图标(甚至还有16色的)
#11
schtg2022-10-15 16:50
好!
#12
吹水佬2022-10-15 22:45
windows的icon资源可以取用,不用转出png
#13
cssnet2022-10-17 07:58
以下是引用吹水佬在2022-10-15 22:45:11的发言:
windows的icon资源可以取用,不用转出png


windows的icon有好多个尺寸,如Win11的ICO有:
256*256
64*64
48*48
40*40
32*32
24*24
20*20
16*16
若要用到16*16、24*24或64*64之类尺寸,感觉上,仍是转出相应精确尺寸的PNG会比较方便。
#14
吹水佬2022-10-17 13:19
win10也有,可直接从PE文件里取出
#15
吹水佬2022-10-17 14:11
通常的api默认ICON有16*16(小图标)和32*32(大图标),GDI+的api也是如此,会自动变形。
微软过去与IBM对ICON有协议16*16和32*32,不知是否与这有关。

#16
吹水佬2022-10-18 23:04
有空用VFP写个按PE格式直接从文件提取图标(256*256到16*16)。
用C简单试了一下 shell32.dll.mun 大大小小就有3000多个icon,不知有无重复。
解释PE涉及到不少结构类型数据和地址换算,用VFP写有点复杂,要慢慢试。

#17
吹水佬2022-10-25 15:52
简单转换一下 PNG-->ICO 也可以

** form.PngToIco(pngPath)
LPARAMETERS pngPath
png = FILETOSTR(pngPath)
ico = 0h000001000100+REPLICATE(0h00,8)+BINTOC(LEN(png),"4rs")+0h16000000+png
icon = FORCEEXT(pngPath,"ico")
STRTOFILE(ico,icon)
RETURN icon

** CommandButton.Init
this.Picture = thisform.PngToIco(this.Picture)
#18
吹水佬2022-10-27 09:35
Win10的也有不少,使用时可以从文件引用,用完就丢。
对于image使用在内存处理就可以,不用导出文件。
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


还有一组10个不同大小的,256*256 ~~~ 16*16
只有本站会员才能查看附件,请 登录
#19
吹水佬2022-10-27 09:42
XP好象不支持PNG图像数据的ICON
#20
cssnet2022-10-27 10:59
感谢精彩示例!想不到PNG-->ICO会这么简单。

以下是引用吹水佬在2022-10-25 15:52:17的发言:

简单转换一下 PNG-->ICO 也可以

** form.PngToIco(pngPath)
LPARAMETERS pngPath
png = FILETOSTR(pngPath)
ico = 0h000001000100+REPLICATE(0h00,8)+BINTOC(LEN(png),"4rs")+0h16000000+png
icon = FORCEEXT(pngPath,"ico")
STRTOFILE(ico,icon)
RETURN icon

** CommandButton.Init
this.Picture = thisform.PngToIco(this.Picture)

1