我已经通过gdi+实现。我想知道还有没其它的方法。
解决方案 »
- CListCtrl的ToolTip怎么显示不出来?
- 关于IHTMLFrameCollection2的问题,急!!!!!!!!
- windows里面对一个初始socket的选项的默认设置是怎样的呢?
- 如何获得一个系统的字体资源,并用ComboBox显示出来
- 游戏错误提示,有详细代码?
- 已知一个文件名的位置(比如c:\a.exe,或c:\b.txt,或c:\c.inf....?).如何得到其扩展名?
- 如何在一个全局函数中取得当前视图的句柄???
- 请问如何把一串十六进制编码转换为汉字字母数字。。。。。(在线等。。。)
- 关于语音通信
- 把其他程序作为子窗口嵌入到MFC对话框程序
- CHtmlView 枚举指定的超链接
- mfc 如何在程序自动重启后,继续操作之前未完成的工作!
怎么贴的。我看过一个软件,能实现这种效果。他的目录下有四条png格式的斜线,刚好可以把四个角隔开,不知道如何实现的?用贴图怎么做的呢?
当然,还是你上帖的方法,直接在原来底图上面贴最方便!
建议楼主看看CXIMAGE是怎么做的,参考一下!嘿嘿http://www.codeproject.com/KB/graphics/cximage.aspx
实际处理过程是与格式独立的。
至于要支持多种格式,比较成熟的库CXimage,GDAL,OPencv等等(后二者专业信比较强)
掩码可以认为是一个2值图像,为0就使用原始影像,为1就使用覆盖在上面的影像。当然也可以使用两个影像的组合。一般来说对被添加的影像二值话即可(设置一个合适的阈值)。
if(grey[i]>128)
{greyTemp[i]=1}
else{grepTemp[i]=0}
最简单的掩码生成函数
if(grepTemp[i]=1)
{
pData[i] = grey[i]
}
最简单的合成函数
grey被添加图片灰度,grepTemp掩码,pData原始图片
看我打的这么辛苦,楼主该给分了吧。
不如你说说要实现怎样的功能好了...
只是看着那幅图像根本看不出有啥妙处,恕眼拙~~~
如果只是显示一副图像的某一部分,例如用个三角形盖着它的话,GDI用SelectClipRgn()就随便搞定的。
至于不用GDI+来对付多格式的话,估计开源的就算CxImage最好了.(ms还可以用dx)last : 看你那貌似不是把原图映射到任意形状,而只是用任意形状盖住而已~~对吧?
举个简单的例子,在OnDraw()函数里显示前:
CRgn rgn;
pDC->BeginPath();
pDC->MoveTo( 50, 50 );
pDC->LineTo( 100, 100 );
pDC->LineTo( 0, 100 );
pDC->LineTo( 50, 50 );
pDC->EndPath();
rgn.CreateFromPath( pDC );
pDC->SelectClipRgn( &rgn );
显示:
pDC->BitBlt()..这是用path,当然也可以直接CreateXXXXRgb()的. 实际上自己喜欢搞成什么形状就搞什么,这只是举个例.
感觉上那只是陪衬,也就是说单纯画个菱型或者其它形状在那不好看,画完帖点"装饰品"上去,那就很象"像框"了~~估计99.99%也是用clip rgn搞定的..
你能删掉一条斜线png,而它覆盖的角就暴露出来了?
你没它的代码来look look?没代码你搞掉它的图片而它就露馅了?那有可能它是"软"的,扫描合成,也有可能使用CombineRgn/clipRgn来搞的,也有可能是堵个模的...
被你弄掉了它的图片就露馅了,也不能说明什么.反正只是覆盖图片的话,那是easy job~~
设想在画板中随手画个古灵精怪的形状在BMP上,然后就盖住其它的地方,那它就做不到了,而这个本来可以用CombineRgn/clipRgn来KO掉的.
当然,做模也有它的好处的,起码有个简单且漂亮的边框先.hoho.btw : 纯属个人观点, 不代表它就是那样做的.
用了你"某只角"的图片来cut掉了前景的四只角后,然后放在背景上..
当然还要帖多个在中间才有意思(象你那样~)三幅源图片:
http://blog.chinaunix.net/photo/45457_100101222221.jpg
http://blog.chinaunix.net/photo/45457_100101222245.png
http://blog.chinaunix.net/photo/45457_100101222756.jpg
二:住要帖图的四只角坐标
CPoint pt[4] = { xxxxxxxxxxxx }
三:用8个指针分别住背景(车)和前景(风景)图的四只角的pixel
LPBYTE lpBG[4] = xxxxx
LPBYTE lpFG[4] = xxxxxxx
然后就简单了:
1:遍历一次边框,注意,是边框。。不是1600x1200的那个,不用紧张! 150x150而已,就搞定4只角。
2:把上两只的中间部分的扫描线漏掉的pixel copy去bg,然后是下面两只。
3:把剩余中间的部分copy去bg..
那就mix了BG和FG.以上全是"软"方法,当然,还要搞搞新意思:
把女人图合成上去,就做成最后合成图了。(那是用硬方法:GDI的透明BitBlt()).
当然,女人图是被我透视变换后才透明合上去的。半软半硬,时间在左下角......