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