KeyFansClub
Prz - 2006/3/15 16:24:00
最近AVG32情结死灰复燃,终于写出了解读PDT图像文件的代码;
再次重写了AVG的文件解压引擎,利用Object Pascal的多态性,实现了一个引擎解压多种AVG系文件(AVG32 SEEN, PDT, AVG2K SEEN, G00 ...)
顺便研究了一下Windows GDI API, 方便的实现了Alpha通道图像的高速支持...
下面不是骨灰极AVG爱好者以及程序爱好者请不用购买了... ^^
Update: 经过一个多小时的搜索和研究,终于实现了Alpha窗口功能! ^_^
Update: 重头整理了对象的继承树,并且加入了资源控制,支持低内存模式! ^_^
[Payview=8,32]
[URL=upload/KFCFile9165_PDTReaderTest.rar]->PDT图像阅读演示 (技术预览)<-[/URL]
[URL=upload/KFCFile9168_PDTReaderTest.rar]->PDT图像阅读演示 (带Alpha窗口功能!)(技术预览)<-[/URL] (详细说明见第二部分)
[URL=upload/KFCFile9171_PDTReaderTest.rar]->PDT图像阅读演示 (低内存模式)(技术预览)<-[/URL] (详细说明见第三部分)
GUI很简陋,主要是为了验证PDTImage对象的正常工作以及Alpha通道的支持。
目前的PDTImage为独立的对象,但是将来会从TGraphic继承下来,并且可以在Graphic单元注册图形类型,从而直接支持通过TPicture在设计时或者运行时直接打开,以及直接对Bitmap进行Assign操作。
使用方法:
0. 直接点击运行;
1. 按下Ctrl然后点击窗口,将会出现打开文件对话框,选定一个有效PDT文件;
2. 使用以下方法用不同方式察看图像:
左键单击 - 将图像部分直接绘制到窗口(不含Alpha通道)
右键单击 - 将Alpha通道部分直接绘制到窗口(以灰度表示)
Shift+左键单击 - 将图像部分转换为一个TBitmap对象然后直接绘制(不含Alpha通道) : 效果应该和左键单击等同
Shift+右键单击 - 将Alpha通道部分转换为一个灰度TBitmap对象然后直接绘制 : 效果应该和右键单击等同
Alt+左键单击 - 在天蓝色的背景下将图像以Alpha通道模式绘制到窗口
Alt+右键单击 - 在天蓝色的背景下将图像直接以透明色模式绘制到窗口 : 应该看得出来在这种模式下图像的边缘发黑,有毛刺
[Wrap=点此观看演示]演示1A: 带Alpha通道支持
[IMG=646,Center]http://61.152.198.58/WebPaste/WithAlphaChannel.PNG[/IMG]
演示1B: 不带Alpha通道支持
[IMG=646,Center]http://61.152.198.58/WebPaste/WithTransparentKeyColor.PNG[/IMG]
演示2A: 带Alpha通道支持
[IMG=646,Center]http://61.152.198.58/WebPaste/WithAlpha2.PNG[/IMG]
演示2B: 不带Alpha通道支持
[IMG=646,Center]http://61.152.198.58/WebPaste/KeyTrans2.PNG[/IMG]
演示3A: 带Alpha通道支持
[IMG=646,Center]http://61.152.198.58/WebPaste/WithAlpha3.PNG[/IMG]
演示3B: 不带Alpha通道支持 (一塌糊涂)
[IMG=646,Center]http://61.152.198.58/WebPaste/KeyTrans3.PNG[/IMG][/Wrap]
最后,作为一个Bonus,按下'x'键看看有什么效果? ^_^ (前提是首先要载入一个含有Alpha通道的PDT文件) [Wrap=*嘿嘿,想知道么*][IMG=640,Center]http://61.152.198.58/WebPaste/Bonus.PNG[/IMG]
[/Wrap]
实现了Alpha窗口功能:
* 什么是Alpha窗口?
就是整个窗口的内容以Alpha通道混合模式描绘在桌面上
虽然看上去效果和前一个版本提供的Bonus模式一样,但是本质上是完全不同的,用鼠标拖动一下就可以看出来了。
* Alpha窗口有什么好处?
好处多了! ^-^
1. 窗口图像可以和桌面以及其它窗口自然的混合
2. 附带自动实现了不规则窗口功能:
也就是说,看上去完全透明的区域不仅仅是看上去透明而已;
鼠标的点击动作也是直接穿越了该区域直达下一层窗口的!
* 怎么样激活Alpha窗口模式?
在正常模式下按下'z'键(再按取消)
* 我想看看用透明色而不是Alpha支持是什么样子的?
首先声明: 吓死不怪我...
在正常模式下按下'Z'(注意是大写)键(再按取消)
演示: (左为Alpha窗口,右为透明色窗口)
[IMG=819,Center]http://61.152.198.58/WebPaste/AlphaWindow.PNG[/IMG]
另外,Alpha窗口模式下,我也把窗口定位于顶端,也就是说,嘿嘿,可以把这个程序用作一个小小的桌面装饰!
(当然还有任务栏按钮,Alt-Tab等不完善的地方,不过毕竟程序本来不是设计为干这个用的,作为附加功能还是不赖吧! ^o^)
资源消耗模式可选:
* 几乎从头到尾梳理对象的继承树,现在的结构更加有利于今后的扩展:
AVGClassBase
|->AVGPackageBase
| |->AVG32ScenarioPack
| |->AVG2KScenarioPack
| |->KOEPack
.....
|->AVGFileBase
| |->AVG32Scenario
| |->AVG2KScenario
| |->AVGImageBase
| | |->PDTHandle
| | | \->PDTImage
| | |->G00Handle
| | | \->G00Image
.........
| |->AVGMusicBase
| | |->KOEHandle
| | | \->KOEWave
| | |->NWAHandle
| | | \->NWAWave
.........
* PDTImage对象现在支持四种资源消耗模式:
1. 奢华模式: 提前获取需要的内存和系统对象;
主动更新需要的图像;
如无必要绝不释放资源。
此模式执行效率最高,速度最快。适合资源充足,对象实例数目少的情况。
2. 一般模式: 按需要获取需要的内存和系统对象;
被动更新需要的图像;
如无必要绝不释放资源。
此模式执行效率高,相对节约资源(没有用到的功能将不会占用资源)。适合资源较充足,性能要求较高的情况。
3. 节约模式: 按需要获取需要的内存和系统对象;
被动更新需要的图像;
使用完的系统对象立刻被释放。
此模式执行效率一般,但是节约资源,特别是系统资源(Device Context)。适合系统资源紧张,对象实例数目多的情况。
4. 抠门模式: 按需要获取需要的内存和系统对象;
被动更新需要的图像;
使用完的系统对象和内存资源立刻被释放。
此模式执行效率最低,但是非常节约资源和内存。适合系统资源和内存紧张,对象实例数目多的情况。
哦,顺便说一下,前一个版本的执行效率相当于"抠门模式",资源消耗相当于"节约模式"...
* 更新的程序使用了PDTImage"一般模式"运行,但是当使用Alpha窗口模式时,对象占用的不必要内存资源会被清空,以达到节约内存的效果。(当然程序本身还是基于Delphi VCL的,因此内存消耗也不会很小。如果用Windows API直接创建窗口将会有明显的效果)
* 另外加入了一个小修改,去掉了任务栏上面的按钮。Alpha窗口下的Alt-Tab怎么也去不掉,没办法只有改天再研究了... XD
[/Payview]
orlye - 2006/3/15 16:27:00
沙发。
此物必买。
kerin ma - 2006/3/15 16:28:00
啊,新的土豆-v-
购入
QuinMantha - 2006/3/15 16:59:00
咕噜。。。下了以后才发现电脑里竟然一个PDT文档都没有 --;
还有,演示的图看不到 ;;
Prz - 2006/3/15 17:10:00
看不到演示图属于RPWT...我管不了 -v-
至于PDT文件,要追溯到远古的Kanon / AIR时代了...
BTW, 终于玩到了Clannad语音版了... -v-
orlye - 2006/3/15 18:56:00
咋我按x出来的图是都有蓝色背景而不是透明背景的呢?
Key_UC - 2006/3/15 19:34:00
购买成功
eng - 2006/3/15 21:31:00
问个杀问题,这是什么,能用来做什么?
悠久ノ風 - 2006/3/15 21:38:00
原来AIR的PDT图档自带alpha通道啊。
以前用susie抽出来的图都有锯齿,以为是AVG32引擎有全屏反锯齿([wrap=?]正确的名字是边缘柔化?[/wrap])功能..
Prz - 2006/3/16 3:45:00
以下引用orlye在2006-3-15 18:56:25的发言: 咋我按x出来的图是都有蓝色背景而不是透明背景的呢? |
这个大概是因为你屏幕没有使用32位色。
orlye - 2006/3/16 8:43:00
以下引用Prz在2006-3-16 3:45:15的发言:
这个大概是因为你屏幕没有使用32位色。 |
果然是这样。
我用的16位色。
粘土火星 - 2006/3/16 9:28:00
持续关注=v=bb
Prz - 2006/3/16 10:52:00
终于实现了很久以前就想实现的东西.....想起来挺复杂,结果最后发现竟然如此简单,而且似乎以前在什么地方瞄到过(当时似乎没有注意)...Prz
Prz - 2006/3/16 11:32:00
看着屏幕右下角的Misuzu越看越可爱,自顶一个,以便昨天购买的用户看到后来升级,都来享受一下! ^^
LOVEHINA-AVC - 2006/3/16 12:05:00
GDI+才是直接支持半透明的喔,看来这个得在XP下面用?
TO风:PDT其实就是一个加密的PNG啦,内建8位ALPHA CHANNEL
Prz - 2006/3/16 12:18:00
不是PNG吧,PNG压缩算法的效率高的多
而且PDT似乎也没有加密,G00才是"加密"了的PDT (关键字节通过非线性转换)
我怎么觉得GDI+支持的是带Alpha的Brush和Pen (当然还有其他好玩的东西)
反正我似乎没有用到gdiplus.dll, 仅仅是使用了User32.lib, Msimg32.dll里面的函数。
至于是不是XP专用我就不清楚了, 有可能。
Prz - 2006/3/16 12:41:00
另外确认,Alpha窗口在16bit模式下工作正常。
悠久ノ風 - 2006/3/16 12:53:00
效果的确很不错啊,看上去就像是ssp一样,不知道ssp用的技术是不是这个。
这样的话应该可以做一些很有趣的东西了。
LOVEHINA-AVC - 2006/3/16 13:01:00
比较吃资源就是了XD
顺便在KFC发一下MBR.NET + EX wwww
327053532 - 2006/3/16 13:37:00
强货啊
顺便报销
温泉企鹅 - 2006/3/16 13:41:00
好物~~
可以把神奈放在桌面上了~~
BTW~~可以导出JPG或者是BMP吗????
Misha - 2006/3/16 13:48:00
导出BMP或JPG就会丢失Alpha通道
导出PNG倒是可以,只不过我比较懒,三行都懒得写.... -v-
悠久ノ風 - 2006/3/16 14:13:00
To 企鹅:
要导出图片的话直接用这个古物吧
[URL=upload/KFCFile9169_d4d504a3a315ef7b.rar]pdtcnvwin.rar[/URL]
导出为psd格式,之后想怎么处理就怎么处理。
susie有个插件也可以导出图片,不过不支持alpha通道,就不丢出来了。
忧郁の丸子 - 2006/3/16 14:14:00
楼主用的是16:10的液晶吗?果然桌面够大orz
温泉企鹅 - 2006/3/16 14:46:00
以下引用悠久の风在2006-3-16 14:13:43的发言: To 企鹅: 要导出图片的话直接用这个古物吧 [URL=upload/KFCFile9169_d4d504a3a315ef7b.rar]pdtcnvwin.rar[/URL] 导出为psd格式,之后想怎么处理就怎么处理。
susie有个插件也可以导出图片,不过不支持alpha通道,就不丢出来了。 |
感谢久风~~
神奈导出中…………
Prz - 2006/3/16 14:51:00
如果要提取各种资源的话到这里来
http://d4.princess.ne.jp/pcat/包括planetarian免Key提取(不过没有Key的话资源似乎不太完全)
Prz - 2006/3/17 17:01:00
再次更新 v(^_^)p
154490951 - 2006/3/17 17:05:00
............没有看清楚是限量就买了
Chrisphony - 2006/3/18 18:45:00
感动啊……
LZ的桌面好帅。。。。OTL
Sonic^Destiny - 2006/3/18 19:03:00
最后一份收下收藏。
1