当前位置:编程学习 > wap >>

PNG图片透明度处理,边角毛糙的问题?

问题和这个非常相似
http://topic.csdn.net/u/20081218/17/a3ee1ea4-35f0-4e3a-ae69-127a214d4cb8.html

不过这个是用C#的,实在是看不懂啊,有C++的不

有大侠指点一下嘛,非常感谢! --------------------编程问答-------------------- 大侠啊 要是有个例子就更好了,谢谢 --------------------编程问答-------------------- 是图的问题吧 --------------------编程问答-------------------- 应该不是的 
http://topic.csdn.net/u/20081218/17/a3ee1ea4-35f0-4e3a-ae69-127a214d4cb8.html 
里面有个人说可以用IImage COM

但是不清楚该怎么样,有了解的不?

ultrapro你怎么啥时候都在啊 呵呵 --------------------编程问答-------------------- IImage COM 的接口也挺简单的,看一下也就会用了。SHLoadImageFile不行么 --------------------编程问答-------------------- 一般的会用 不过怎么弄出AlphaBlend效果 不清楚啊。。。 --------------------编程问答-------------------- 那还的用AlphaBlend 的函数吧 --------------------编程问答-------------------- 这个就不知道了。。。。来个大侠啊 --------------------编程问答-------------------- BLENDFUNCTION bf;
bf.BlendOp=AC_SRC_OVER;
bf.BlendFlags=0;
bf.AlphaFormat=0;
bf.SourceConstantAlpha=100;
m_backDC->FillSolidRect(m_left,m_top,m_width,m_height,RGB(0,33,97));
AlphaBlend(m_pDC->m_hDC,m_left,m_top,m_width,m_height,m_backDC->m_hDC,m_left,m_top,m_width,m_height,bf);

这个函数最关键的是要填充好BLENDFUNCTION结构,MSDN上有很详细的说明,试一下就知道了
--------------------编程问答-------------------- 就是不要用AlphaBlend这个函数实现透明效果啊,AlphaBlend这个函数实现的透明效果有毛边

有个大侠说用IImage,有谁会用这个实现透明效果的请指教 --------------------编程问答-------------------- C++更简单啦,可以直接调用呢,不用像c#那样~~~

IImage *m_pImgSkin;

IImagingFactory *pImgFactory = NULL;
if ( SUCCEEDED( CoCreateInstance (CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void ** &pImgFactory ) ) )
    {
       if( S_OK == pImgFactory->CreateImageFromFile( filePath, &(m_pImgSkin)) )
{
                        ImageInfo ii;
m_pImgSkin->GetImageInfo( &ii );
RECT rc;
rc = *pRC;
rc.right = rc.left + ii.Width;
rc.bottom = rc.top + ii.Height;
m_pImgSkin->Draw( hdc, &rc, NULL );//HDC hdc为绘制目标句柄
               }
pImgFactory->Release();
    } --------------------编程问答-------------------- AlphaBlend智能对整张图片做Alpha通道处理~~~~~~~~ --------------------编程问答-------------------- pcjbird大侠你好啊

原谅我比较笨哈

你说的
-----------------------
C++更简单啦,可以直接调用呢,不用像c#那样~~~ 

IImage *m_pImgSkin; 

IImagingFactory *pImgFactory = NULL; 
if ( SUCCEEDED( CoCreateInstance (CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void ** &pImgFactory ) ) ) 
    { 
      if( S_OK == pImgFactory->CreateImageFromFile( filePath, &(m_pImgSkin)) ) 

                        ImageInfo ii; 
m_pImgSkin->GetImageInfo( &ii ); 
RECT rc; 
rc = *pRC; 
rc.right = rc.left + ii.Width; 
rc.bottom = rc.top + ii.Height; 
m_pImgSkin->Draw( hdc, &rc, NULL );//HDC hdc为绘制目标句柄 
              } 
pImgFactory->Release(); 
    }
---------------------------

这段是把图片用IImage画出啦,那怎么实现我要去掉毛边的想法啊??
我的PNG图片,原始是像这样的想要画出的部分只是中间的那个太阳(背景透明)。我直接画PNG的话,太阳的边缘的白色还是存在的,所以使用AlphaBlend处理,但是处理后边缘有毛边。

望指教,感激不尽哈!
--------------------编程问答-------------------- pcjbird大侠你好啊

原谅我比较笨哈

你说的
-----------------------
C++更简单啦,可以直接调用呢,不用像c#那样~~~ 

IImage *m_pImgSkin; 

IImagingFactory *pImgFactory = NULL; 
if ( SUCCEEDED( CoCreateInstance (CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void ** &pImgFactory ) ) ) 
    { 
      if( S_OK == pImgFactory->CreateImageFromFile( filePath, &(m_pImgSkin)) ) 

                        ImageInfo ii; 
m_pImgSkin->GetImageInfo( &ii ); 
RECT rc; 
rc = *pRC; 
rc.right = rc.left + ii.Width; 
rc.bottom = rc.top + ii.Height; 
m_pImgSkin->Draw( hdc, &rc, NULL );//HDC hdc为绘制目标句柄 
              } 
pImgFactory->Release(); 
    }
---------------------------

这段是把图片用IImage画出啦,那怎么实现我要去掉毛边的想法啊??
我的PNG图片,原始是像这样的想要画出的部分只是中间的那个太阳(背景透明)。我直接画PNG的话,太阳的边缘的白色还是存在的,所以使用AlphaBlend处理,但是处理后边缘有毛边。

望指教,感激不尽哈!
--------------------编程问答-------------------- 上面不是说了用AlphaBlend实现不了你的效果嘛!!! 用IImage试试!!! --------------------编程问答-------------------- pcjbird 小弟太愚钝了 搞定!! 谢谢大侠指点! --------------------编程问答-------------------- 这个问题是可以通过过滤效果 ,就是去掉不需要的颜色来处理的,具体叫什么函数我忘记了,只有在WINCE 5.0以上的版本支持 --------------------编程问答-------------------- 先转换成BMP,再去处理成你想要的透明效果。
否则可以参考cximage类库。
补充:移动开发 ,  Windows Phone
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,