是否厌倦了那些光亮如新、毫无瑕疵的窗户?是否对那些充满未来感的玻璃感到乏味?是否更倾向于拥有那种经典、陈旧、边缘略带烧焦痕迹的窗户,就像那些可能写有宝藏地图的古老历史文献一样?现在,通过现代技术的奇迹,可以从这样:
或者甚至是这样:
变成...(请击鼓)这样:
尼古拉斯·凯奇很快就会开始策划如何偷走窗户了。
现在已经看到了通过烧焦一个普通矩形窗户边缘所能做到的事情。如果从一个形状奇特的窗户区域开始,甚至可以获得更惊人的效果。比如这个完全无聊的窗户:
但是,经过几次应用专利*的窗户烧焦编码技术后,将得到这个奇妙的图像:
如果WMP 9没有被淘汰,它一定会羡慕的。
*实际上并没有专利
告诉更多。来吧,伙计。透露一下。这是怎么做到的?
每隔几年,一种长期休眠的技术就会被重新发现,并被微软科学家们利用。在Windows 95中,它是自绘菜单。在Windows 98中,它是FlashWindow()。在Windows XP中,它是窗口区域。
这些进步甚至超过了学习新的SI前缀的需求,因为硬盘越来越大(给女士们留下深刻印象的热门提示:在tera-之后是peta-)。
现在,在2008年,发现了...
旋转区域
ExtCreateRegion() API可以召唤一个区域,而不需要RGNDATA块。魔法来自于XFORM参数。用适当培养的XFORM咒语成分给代码撒上灰尘,ExtCreateRegion()也会旋转该区域。
例如,从一个原始区域rgn开始,可以用这个咒语创建一个旋转30度的副本:
int degrees = 30;
float radians = degrees * 2.0f * 3.14159f / 360.0f;
XFORM xform = { cosf(radians), sinf(radians),
-sinf(radians), cos(radians) };
RGNDATA* pData;
UINT cby;
CRgnHandle rgn = /* original region */;
CRgn newRgn;
// Get the RGNDATA for the original region.
cby = rgn.GetRegionData(NULL, 0);
pData = (RGNDATA*)new BYTE[cby];
rgn.GetRegionData(pData, cby);
// CreateFromData() calls ExtCreateRegion().
newRgn.CreateFromData(&xform, cby, pData);
delete[] (BYTE*)pData;
XFORM的成员在微软开发者网络的宝典中有概述。当使用XFORM进行旋转时,前四个成员设置如下:
eM11: 旋转角度的余弦值
eM12: 旋转角度的正弦值
eM21: 旋转角度正弦值的负数
eM22: 旋转角度的余弦值
要实现烧焦效果,只需反复对窗口区域应用旋转,频率随意。让舍入误差来完成剩下的工作!