我已经通过gdi+实现。我想知道还有没其它的方法。

解决方案 »

  1.   


    怎么贴的。我看过一个软件,能实现这种效果。他的目录下有四条png格式的斜线,刚好可以把四个角隔开,不知道如何实现的?用贴图怎么做的呢?
      

  2.   

    先将字画到内存中(一个BMP空间),然后,透明贴图到你的底色图片!
    当然,还是你上帖的方法,直接在原来底图上面贴最方便!
      

  3.   

    那是,如果要支持多种方式,贴图不方便的!
    建议楼主看看CXIMAGE是怎么做的,参考一下!嘿嘿http://www.codeproject.com/KB/graphics/cximage.aspx
      

  4.   

    首先理解的是处理图像最终都是对于DIB进行处理,也就是说任何格式都是从 **格式->DIB->处理->**格式
    实际处理过程是与格式独立的。
    至于要支持多种格式,比较成熟的库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原始图片
    看我打的这么辛苦,楼主该给分了吧。
      

  5.   

    我看了别人的软件就只用了这四条线就实现了上面的功能,如果是圆角的话,那会有圆弧的图片,都是png格式的。
      

  6.   

    抱歉,没看到图,你所说的效果用贴图可以的,还有就是使用一些美化库,比如Skin++
      

  7.   

    有什么特别?
    不如你说说要实现怎样的功能好了...
    只是看着那幅图像根本看不出有啥妙处,恕眼拙~~~
    如果只是显示一副图像的某一部分,例如用个三角形盖着它的话,GDI用SelectClipRgn()就随便搞定的。
    至于不用GDI+来对付多格式的话,估计开源的就算CxImage最好了.(ms还可以用dx)last : 看你那貌似不是把原图映射到任意形状,而只是用任意形状盖住而已~~对吧?
      

  8.   

    假设要挖个三角型,在OnDraw(CDC *pDC)加几句就变成三角型,其它地方就弄没了..
    举个简单的例子,在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()的. 实际上自己喜欢搞成什么形状就搞什么,这只是举个例.
      

  9.   

    汗,习惯手势..Rgn写成Rgb了 -_-"水饺!ZZzzz
      

  10.   

    那你能猜测出,我看的那个软件为能过四条png的斜线就能完成些功能。是不是要简单一些。
      

  11.   


    感觉上那只是陪衬,也就是说单纯画个菱型或者其它形状在那不好看,画完帖点"装饰品"上去,那就很象"像框"了~~估计99.99%也是用clip rgn搞定的..
      

  12.   

    不清楚..
    你能删掉一条斜线png,而它覆盖的角就暴露出来了?
    你没它的代码来look look?没代码你搞掉它的图片而它就露馅了?那有可能它是"软"的,扫描合成,也有可能使用CombineRgn/clipRgn来搞的,也有可能是堵个模的...
    被你弄掉了它的图片就露馅了,也不能说明什么.反正只是覆盖图片的话,那是easy job~~
      

  13.   

    哦,那它貌似真的是用4幅图片来盖帽的,设定那些png图片黑线内外侧的alpha byte,就透明盖上去...(用32Bit Bmp也一样,高8位可以用来做标记.)麻烦而且适应性差...
    设想在画板中随手画个古灵精怪的形状在BMP上,然后就盖住其它的地方,那它就做不到了,而这个本来可以用CombineRgn/clipRgn来KO掉的.
    当然,做模也有它的好处的,起码有个简单且漂亮的边框先.hoho.btw : 纯属个人观点, 不代表它就是那样做的.
      

  14.   

    设定那些png图片黑线内外侧的alpha byte,就透明盖上去...我就想知道,如何盖过去呢。他速度挺快的。
      

  15.   

    陪你玩玩吧.
    用了你"某只角"的图片来cut掉了前景的四只角后,然后放在背景上..
    当然还要帖多个在中间才有意思(象你那样~)三幅源图片:
      

  16.   

    显示不了三幅源图片,直接给连接算了..nnd~~http://blog.chinaunix.net/photo/45457_100101222207.jpg
    http://blog.chinaunix.net/photo/45457_100101222221.jpg
    http://blog.chinaunix.net/photo/45457_100101222245.png
      

  17.   

    漏了给出最终合成图,汗.. : 
    http://blog.chinaunix.net/photo/45457_100101222756.jpg
      

  18.   

    Sorry,代码欠奉,只能说说实现方法,谁都可以做得到的:一:分别把四个BMP读入内存 (车/风景/女人/边框)
    二:住要帖图的四只角坐标
    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()).
    当然,女人图是被我透视变换后才透明合上去的。半软半硬,时间在左下角......