最近有人要我写一个软件,就是模拟微信对话并生成图片,我花了一个星期的时间,总算写成了,界面方面模拟的一个收费软件,功能比他只多不少
完全同步最新版微信有没有,免费使用
在这可以下载 https://pan.baidu.com/s/1gfeWCON
今天在这里不想讲技术实现,因为bitmap这个东西在windows下面基本上被玩残玩烂了,玩不出什么花样了
但今天也有一个可讲的东西,是我在flash里面发现的,叫做9切片,后来被android抄袭过去了,叫做 .9图 点九图
这也再次证明了android对flash as3.0的各种抄袭,讲真,我是挺喜欢As3的,有些人各种不喜,那你特么的倒是出一种替代产品啊?说什么flash要运行在虚拟机里面,占资源,易崩溃,不好管理,你特么的,JAVA android哪个不是运行在虚拟机里面?
分析android源代码,as3是一个绕不过去的坎, as3的特效矩阵变换等核心功能,你看在Android里面全抄过去了. canvas bitmap graphics range rect 真是一个又一个熟悉的单词啊,不过也不能怪android, 事实上,这些GUI方面的东西,是由windows发明的
画布 DC, 句柄 设备, 场景 位图, 都是Windows下的,被各种语言所包装,现在流传到android上,所以一点不新鲜.
现在回到九切片上来,当时在FLASH中看到,一直不得其解,不知道哪里会用到这功能, 前不久在android中也看到了,在开发微信对话生成器的时候,我才明白了,对话有一个背景,你要拉宽拉长,又要保证那向面向人头的小箭头不变形,四个角不变形,就要用上.
我不知道九切片这个技术是不是FLASH的人最先发明的,如果是,那真是天才的设计啊,谷哥这帮蠢货,什么都是抄, 不愿意动脑筋设计.
这些图都是固定的大小,如果要实现动态大小,保证重点部位不变,就要用到九切片,但Delphi根本没有这种说法,所以只能自己实现了.
//.9缩放 左上角
WXContenImg.Canvas.CopyRect(Rect(left,top,left + 10,top + 10),bmp2.Canvas,Rect(11,0,21,10));
//顶部拉伸
WXContenImg.Canvas.CopyRect(Rect(left + 10,top,right - 10,top + 10),bmp2.Canvas,Rect(20,0,30,10));
//右上角
WXContenImg.Canvas.CopyRect(Rect(right - 10,top,right,top + 10),bmp2.Canvas,Rect(mainpic.Width - 10 ,0,mainpic.Width,10));
//左下角
WXContenImg.Canvas.CopyRect(Rect(left,bottom - 10 ,left + 10,bottom),bmp2.Canvas,Rect(11 ,mainpic.Height - 10,21,mainpic.Height));
//底部拉伸
WXContenImg.Canvas.CopyRect(Rect(left + 10,bottom - 10,right - 10,bottom),bmp2.Canvas,Rect(20,mainpic.Height -10,30,mainpic.Height)); //右下角
WXContenImg.Canvas.CopyRect(Rect(right - 10,bottom - 10,right,bottom),bmp2.Canvas, Rect(mainpic.Width -10,mainpic.Height - 10 ,mainpic.Width ,mainpic.Height ));
//背景区填充
WXContenImg.Canvas.Brush.Color := $FFFFFF;
//填充色
WXContenImg.Canvas.Pen.Color := RGB(223,223,223);
//边框色
WXContenImg.Canvas.FillRect(Rect(left,top + 10,right,bottom - 10));
// 右侧边框
WXContenImg.Canvas.MoveTo(right-1,top + 10); WXContenImg.Canvas.LineTo(right-1,bottom - 10);
//左侧箭头,Y轴30处开始画
WXContenImg.Canvas.CopyRect(Rect(left - 12,top + 30,left ,top + 52),bmp2.Canvas,Rect(0,28,12,50));
//左侧边框
WXContenImg.Canvas.MoveTo(left - 1,top + 10); WXContenImg.Canvas.LineTo(left - 1,top + 30); WXContenImg.Canvas.MoveTo(left - 1,top + 52); WXContenImg.Canvas.LineTo(left - 1,bottom-10);
通过这些技术,我实现了非常完美的效果,跟正版微信效果一模一样,堪称像素级复制.